Racket(emacsとC++ユーザー向け)入門
Racketとは
参考
- racketの紹介 http://kurohuku.blogspot.jp/2012/12/racketlang.html
- モードの解説が詳細すぎるので、その部分は始めての人は読み飛ばす
- Scheme によるプログラミング入門 http://www.kkaneko.com/pro/
- 主にDrRacketを使った丁寧な解説。Scheme言語の学習にはお勧め
準備
.emacs に以下を追記
(setq scheme-program-name "/path/to/racket")
.bashrc に以下を追記
export PATH=$PATH:/path/to/racketInstalledDir/
念のために以下も実行しておく
$ source ~/.bashrc
さらに.emacs に以下を追記しとくと便利な機能
(defun scheme-window () (interactive) (select-window (split-window-horizontally (* 2 (/ (window-width) 3)))) (switch-to-buffer (get-buffer "*scheme*")))
emacsから使う
これをtmp.scmとして保存
(+ 1 3) (define x (* 2 3)) (display (+ x 3))
$ emacs tmp.scm
- M-x run-scheme
- (+ 1 3) の行の最後にカーソル移動 C-x C-e
- (+ 1 3)から(display (+ x 3)) まで選択して C-x C-r
シェルを実行してみる
lsコマンドをRacketから実行する
#lang racket (require racket/system) (system "ls")
lsコマンドの実行結果をRacketに読み込み
#lang racket (define tmp (process "ls")) (require racket/port) (display (port->string (car tmp))) ;;表示 ;(read (cadr tmp));;読み込む
C++のプログラムの実行結果を受け取る
stdout_test.cpp
#include <iostream> main() { std::cout << 34567; }
g++ stdout_test.cpp -o stdout_test.exe
#lang racket (require racket/port) (display (port->string (car (process "./stdout_test.exe")))) (equal? "34567" (port->string (car (process "./stdout_test.exe"))))
racketをコマンドラインで直接実行
$ racket -e '(+ 10 3)'
ついでにRacketに実行結果を取り込む
(display (port->string (car (process "racket -e '(+ 10 3)'"))))
ffi
ffiというのはfoo.soを直接Racketから読むようにする方法
このffi-tutorial
https://github.com/dyoo/ffi-tutorial
の helloが分かりやすい
https://github.com/dyoo/ffi-tutorial/tree/master/ffi/tutorial/examples/hello
その他応用
- Racketで画像作成(racket/draw) http://kurohuku.blogspot.jp/2012/01/racketracketdraw.html
- (DrRacketが必須なので古いLinuxでは動きません)
- パッケージいろいろ http://planet.racket-lang.org/
- どうしてもLispの()を使う記法が嫌ならこんな方法もある http://planet.racket-lang.org/package-source/soegaard/infix.plt/1/0/planet-docs/manual/index.html
パッケージ
- パッケージいろいろ http://planet.racket-lang.org/]
パッケージの読み方
#lang racket (require srfi/1) (require (planet neil/htmlprag:1:6/htmlprag))
Scheme言語の使い方
- もうひとつの Scheme 入門 http://www.shido.info/lisp/idx_scm.html
- 非常にわかりやすくまとまってる
- Racketのマニュアル http://docs.racket-lang.org/