Scheme 手習い 2 章
エントリ投入の報せが tweet された。
コメント列挙するまえに
not という特殊形式について確認。
基本的には #f が渡された場合のみ #t を戻す、という理解で良いのかどうか。
gosh> (not '()) #f gosh> (not #f) #t gosh> (not #t) #f gosh> (not 1) #f gosh>
中身てきには定義は以下、って事で良いのかどうか (src/vm.c より引用)。ちなみに見てるバージョンは 0.8.11 だったりしてます。
CASE(SCM_VM_NOT) { VAL0 = SCM_MAKE_BOOL(SCM_FALSEP(VAL0)); NEXT1; }
あるいは gauche.h における定義が以下。
#define SCM_FALSEP(obj) ((obj) == SCM_FALSE) #define SCM_TRUEP(obj) ((obj) == SCM_TRUE) #define SCM_NULLP(obj) ((obj) == SCM_NIL) #define SCM_EOFP(obj) ((obj) == SCM_EOF) #define SCM_UNDEFINEDP(obj) ((obj) == SCM_UNDEFINED) #define SCM_UNBOUNDP(obj) ((obj) == SCM_UNBOUND) /* * BOOLEAN */ #define SCM_BOOLP(obj) ((obj) == SCM_TRUE || (obj) == SCM_FALSE) #define SCM_BOOL_VALUE(obj) (!SCM_FALSEP(obj)) #define SCM_MAKE_BOOL(obj) ((obj)? SCM_TRUE:SCM_FALSE)
うむ。#f だったら #t を戻してそれ以外なら #t を戻してます。
エントリについて
- lat? の定義の方法が趣味の問題に見えますのでどちらでも良いはず
- member? のソレはナイスでした
- そもそも述語が '() とか戻しちゃ駄目でしょ的ソレ
- 再起の確認は trace 使えば分かりやすいです
- 慣れたらやらなくなるはず (を
- branch 云々も自分マターで構いません
- git で色々ヤるのも良いと思います
- 関数定義についても色々試してみれば良いと思います。
- 章ごとで分けちゃうとか
- 末端に追加するんじゃなくて先頭に追加するとか
それにしても
とりあえず手元にテキストが無いんだけど、どうやって進めたものやら。