Scheme手習い

define の罠

自分の処理系でLandOfLispを動かしてみようと奮闘中。 でも define の使い方がちょっとずつ違う。。。 Scheme手習いと違うので混乱気味。 ;;land of lisp P13 (define guess-my-number () (ash (+ *small* *big*) -1)) ;;https://github.com/shirok/Gauche-L…

Scheme手習い の > が動かない。

Scheme手習いの > が 自分の処理系でStackOverFlowになってしまうのです。コードはこんな感じです。 ;;p61 (define sub1 (lambda (n) (- n 1))) ;;p75 (define > (lambda (n m) (cond ((zero? n) #f) ((zero? m) #t) (else (> (sub1 n) (sub1 m)))))) (> 100…

MyLisp(仮称) スキーマ手習いの eq?-c が動くようになった。

MyLisp(仮称)の作成中。です。 https://github.com/moremagic/MyLisp/wiki lambda が二回続けてくるなんて想像もしてなかった。 結構悩んだ挙句、lambda 周りの処理を大きく修正。lambda が出現したときのみ環境変数から展開するといいのかな。 applyだけし…

MyLisp(仮称) で no-nums がやっと動いた。

MyLisp(仮称)の作成中。です。 https://github.com/moremagic/MyLisp/wikiScheme手習いの no-nums がどうも動かなかったのでずーっと悩んでました。 ※ 2,3日ほっといたのは内緒w isNumber? の評価前にapplyしていないのが原因でした。 public Sexp eval(…

no-nums 実装

number? って基本関数なんだね。 で、基本関数ってなんだろう? Scheme 処理系で実装されている関数てことかしら? (define no-nums (lambda (lat) (cond ((null? lat) '()) ((number? (car lat)) (no-nums (cdr lat))) (else (cons (car lat) (no-nums (cdr…

pick、rempick 実装

pick (define pick (lambda (n lat) (cond ((null? lat) '()) ((= 1 n) (car lat)) (else (pick (- n 1) (cdr lat)))))) (pick 4 '(aa bb cc ddd ee ff)) ;ddd 答えと比べてみると 最終条件が zero? だなぁ。 あー 掟があったね。掟を守って書き直し。pick (…

(脱線)member? を改造してみた

member? は lat? が #f になる場合はすべてのS式に対して評価されない 例えばこんな感じ。 (member? 'aaa '(bbaab ccc (ddd bbb aaa) bbb)) ; #f member? を memberX? として再定義してみた。 (define memberX? (lambda (a lat) (cond ((null? lat) false) (…

multi rember, R, L, substr を書いてみた

書いてみました。multirember (define multirember (lambda (a lat) (cond ((null? lat) '()) ((eq? a (car lat)) (multirember a (cdr lat))) (else (cons (car lat) (multirember a (cdr lat))))))) ;(multirember 'aaa '(bbb aaa vvv ccc aaa bbb)) multi…

insertR と L に挑戦してみた

パッと思いついた感じで特に問題なくかけた。ただ、思いつきをメモして、晩酌後にやるので ちょっとしたところで結構時間を食ってしまう。勉強するときはお酒 cons しちゃ駄目ね。 (define insertR (lambda (new old lat) (cond ((null? lat) '()) ((eq? old…

lat? 実装にチャレンジ

P15 lat?を書いてみてくださいという問題。 とりあえず先のページを見ないでどれだけかけるか挑戦してみました (define atom? (lambda (x) (and (not (pair? x)) (not (null? x))))) (define (lat? n) (cond ((atom? n) true) ((null? n) true) (else (and (…