Lisp

Lispインタプリタ(2)

でーきーたー。 Main >run "(begin (define fact (lambda(x) (if (= x 0) 1 (* x (fact (- x 1)))))) (fact 10))" 3628800 複数の式の評価には、また対応していないけれど、ちゃんと階乗も計算できる。で、 lispEq (x:y:[]) env = let (x',env') = eval x en…

Lispインタプリタ

id:zyxwvに対抗して、Lispインタプリタを作る。まだ、S式計算機という程度。30分で作ったわけじゃないけど、とりあえず、今日はこれで。とこで、 pInt = do x <- many1 digit return $ Int $ read x や pNil = do string "()" return $ List [] -- liftM?? …

11.5 複数の値にわたる反復

p.163のサンプルコード。 (let ((w 0) (x 1) (y 2) (z 3)) (mvpsetq (w x) (values ’a ’b) (y z) (values w x)) (list wxyz)) 原文だと、 (let ((w 0) (x 1) (y 2) (z 3)) (mvpsetq (w x) (values ’a ’b) (y z) (values w x)) (list w x y z)) これは明らか…

7.8マクロのスタイル

p.103の説明。 だから新しいマクロの定義にgoを使うのは、既存のマクロが代わりに使えないときなら、必ずしも悪いことではない。 のgoはgotoの間違いだと思ったけれど、 Thus it is not necessarily bad style to use go in the definition of a new macro, …

5.6部分ツリーでの再帰

id:mzp:20070526:onlispに続いて、再びOn Lispの訳に異議を唱える。p.76のtrecの説明の最後。 以上より、rfind-ifはoddpによって以下のように表現できる: これの原文は、 Now we can also express rfind-if for e.g. oddp as: となっている。e.g.がついてい…

filter

On Lispを読み始めました。で、4章にでてくるfilterの訳について、ちょっと異議がある。 次の関数filterのsomeに対する性質は、remove-if-notのfind-ifに対する性質と似ている。組み込み関数remove-if-notの返り値は、find-ifに関数を渡してリストの一連のcd…

gaup実装メモ-gaup.rb編

さてさて、お昼を食べたあとは、継続サーバの肝、gaup.scmを移植しよう。 まずはデバッグインターフェースを用意。ああ、Ctrl+C以外終了の方法がないから、SIGINTをtrapしてるのか まずは無難にprint-pageから移植。まあ特に問題はないな なぜかchmodが効い…

gaup実装メモ-cond.cgi編

gaup on Rubyの実装中...。 とりあえず、インターフェースであるcont.cgiから作ろう run-processにずばり対応する関数はない。いやspawnがそうなんだけど、これは1.9からしか使えないから没。fork+execを使おう def self.run(name) pid = fork{ exec GOSH,na…

gaupメモ

デバッグ中にだいたい読んだ感じでは、一番難しそうなのが以下の部分。 (define selector (make <selector>)) ; ..... (define (read-input) ; .... (call/cc (lambda (return) (let* ((path (format #f "/tmp/gaup~a-~a" gaup-pid gaup-cont)) (server (make-server-s</selector>…

継続サーバ

id:Gemmaさんの継続サーバがMacOS X上でうまく動かない。なので、デバッグ中。 症状:いつまで立っても、レスポンスを返さない ps axでみると、gosh cont.cgiだけが起動している -> run-process自体が失敗している? ローカルでgosh cont.cgiとして実行すると…

構造体の比較

CommonLispでは、別メモリに確保されている構造体は、equalでもtにならない。 (defstruct hoge name) (setf a (make-hoge :name "hoge")) (setf b (make-hoge :name "hoge")) (equal a b) ; => nilそこで、使うのがequalp。 (equalp a b) ; => t 定義 COMMON…

今日のtypo

at Scheme (setf foo "foo") ; 正解は(set! foo "foo")at Emacs Lisp (setf foo "foo") ; 正解は(setq foo "foo")CommonLispの呪いだ・・・・。

指定ディレクトリ以下のファイルの文字コードをすべて変換したい

;; ディレクトリ内のファイルのエンコーディングを一括置換 (defun convert-encoding-directory (from to encoding) (setq from (namestring from)) (setq to (namestring to)) (or (and (path-equal from to) (not (yes-or-no-p "入力と出力が同じっぽいっ…

データ

(listp '1) =>nil (listp ''1) =>t

JavaScript-modeでキーワードに色が付かない

http://xyzzy.s53.xrea.com/wiki/index.php?%B3%C8%C4%A5lisp%2Fjavascript-modeのキーワードに色が付かない。 たぶんsite-lisp/site-init.lに書くか~/.xyzzyに書くかの違いだと思うけど、不便なので修正した。 *** javascript-mode.l.orig Wed Mar 2 19:48:…

rrb.l移植メモ

詳しくはまたあとで書く。前回のるびまでRuby Refactoring Browser(RRB)があることを知り、大喜びしました。でも、インターフェイスがEmacsとVim用のしかない。xyzzyが大好きな俺としてはEmacsはなるべく使いたくない。(Macで使っているけど…) というわけで…