lisp

open-junk-file + howmでサンプルコードのメモ

**の言語で〇〇する時はどうするんだっけ?みたいなメモをどう残すか。 こういう細かいメモは、新しい事を覚えた端から古い事を忘れてしまうので、かつて自分が試したコードは、出来るだけ手軽に検索出来る形で残しておきたい。という訳で、ただ置いておく…

SchemeでScheme

2012年の目標の1つにSICPを読むというのがあったのだけれど、結局、完遂出来ずに年を越してしまった。スマホに入れて、通勤中(片道50分)に読んでいたんだけど、4章がちょっと重たくて、つまづいてしまったのである。4章はSchemeでSchemeを実装するというのが…

SICPのexcercise 3.21から3.27

どっかに記録を残しておかないとどこやったか忘れてしまうのでメモ。 3.16 listの中のペアの数を数える関数count-pairの間違った実装が与えられるので、間違った答えを出すような反例を作れという問題。 (define (count-pairs x) (if (not (pair? x)) 0 (+ (…

schemeの可変長引き数メモ

SICPのこの辺を読んでたら、 (define (make-serializer) (let ((mutex (make-mutex))) (lambda (p) (define (serialized-p . args) (mutex 'acquire) (let ((val (apply p args))) (mutex 'release) val)) serialized-p))) のという関数定義があって、これの…

elispの勉強 eval, quoteなど

evalは式を評価する関数 >> (setq x 1) 1 >> (eval x) 1 >> (eval 'x) 1 >> (eval ''x) x 初めてlispを触った時は、この挙動が理解出来なかった。が、式の評価ルールを段階的に当てはめると分かる、多分。まず、 式には 自己評価型式(自分自身に評価される) …

elispの勉強 lambda式など

「lambda」は特別なシンボル。 シンボル lambda が先頭にあるリストは、関数定義と見なされる。 そして、そのようなリストは評価されるとそれ自身になる。 ただし、関数定義として妥当な形式を持ってないと適用される時にエラーになる >> ((lambda (x y) (+ …

elispをちょっとだけ勉強

setqはグローバル環境(っていうのかな)のシンボルに値を代入。letはローカル環境のシンボルに値を代入。 (list (setq z 1) (let 'w 1)) (1 1) (eval z) 1 (eval w) ; error

elispを再びちょっとだけ勉強

lispには、「シンボル型」があるということを理解する必要があるみたいだ。 >> (setq val 1) 1 >> (setq x 'val) val >> (setq y 'val) val >> (+ x y) ; + の引数にシンボル型が来ているのでエラー ; error >> (+ (eval x) (eval y)) ; eval してやると数値…