Hatera::Diary
いろいろ思うところがあり Hatena::Diary をもう一度使うことにする。
茶国 Rev3 さんのところで紹介されていた jonesforth が実に素晴しい。
アセンブラでの Forth の実装だが、ソース中にとても丁寧なコメントが付いており、ソース自体がチュートリアルのようになっている。
あまりにすばらしいので Common Lisp の移植してみる。
Factor の : は ; まで読み込んでワードを定義する。; は終端記号。
Forth の : は辞書にワードのエントリーを作成しコンパイルモードになる。IMMEDIATE 以外のワードは逐次コンパイル(辞書の作成されたワードのエントリーに追加)される。; でコンパイルの後始末を行い、実行モードになる。
Factor は parsing で Forth は IMMEDIATE。
Gforth のマニュアルがよさそう。
Gforth を Debian のパッケージでインストール。
~/.emacs に次を追加。
;;;;Gforth
(autoload 'forth-mode "gforth.el")
(setq auto-mode-alist (cons '("\\.fs\\'" . forth-mode)
auto-mode-alist))
(autoload 'forth-block-mode "gforth.el")
(setq auto-mode-alist (cons '("\\.fb\\'" . forth-block-mode)
auto-mode-alist))
(add-hook
'forth-mode-hook
(function (lambda ()
;; customize variables here:
)))
: hello ." Hello" ;
: my-swap { a b -- b a } b a ;
: my-dup { a } a a ;
図書館から『FORTHへの招待』を借りて読む。
内容は浅い。11,930円だして買わなくてよかった。
むしろ、Gforth のマニュアル http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/ の方が期待していたもの。
Forth のデータタイプは全て数値?
スタックの1番目だけで単精度と数値とするか、
1番目の2番目をあわせて倍精度とするか、
1番目を文字数、2番目の文字列データとするかは、ワード次第。
C に似てる。
気になるのは LITERAL, POSTPONE, [, ] のあたり。
Starting Forth 11. Extending the Compiler http://www.forth.com/starting-forth/sf11/sf11.html
Blog のスタイルを変更します。
です。ます。で書いていると読みてを意識してしまいます。
もともと Blog をはじめたのは自分用のメモとして活用しようという動機からでした。
ということで本来にたちかえります。
いろいろ間違いや不正確な記述が増えるかと思いますが、ご了承ください。
よろしくお願いします。
swank-gray.lisp の stream-listen がバッファしか見ていないのが原因。
バッファが空なら
(listen (swank::current-socket-io))
とか
(mailbox.queue (mailbox mp:*current-process*))
を呼びしてやればいい。
でも
zui > read-char
1
1
CL-USER> ; No value
CL-USER> ここで Enter キーを押した。
(#\Newline)
zui >
みたになってしまう。
投稿者 Yoshinori Tahara 時刻: 20:23 0 コメント
ラベル: Common Lisp
Slime で次のコードを実行する。何か入力しても loop をぬけない。
でも、Slime 使わずにコンソールから Lisp を起動して実行した場合、何か入力すればループをぬける。
なんでだろう?
(loop until (print (listen)) do (sleep 0.5))
投稿者 Yoshinori Tahara 時刻: 23:45 0 コメント
ラベル: Common Lisp