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

MyLisp(仮称)の作成中。です。
https://github.com/moremagic/MyLisp/wiki

Scheme手習いの no-nums がどうも動かなかったのでずーっと悩んでました。
※ 2,3日ほっといたのは内緒w


isNumber? の評価前にapplyしていないのが原因でした。

    public Sexp eval(Cell cell, Map<String, Sexp> env) throws FunctionException {
        if(cell.getCdr().length != 1){
            throw new FunctionException("number?: expects " + cell.getCdr().length + " argument");
        }
        return Atom.newAtom(MyLisp.apply(cell.getCdr()[0], env) instanceof AtomNumber);
    }

実行してみると。。。

(define no-nums
  (lambda (lat)
    (cond ((null? lat) '())
          ((number? (car lat)) (no-nums (cdr lat)))
          (else
           (cons (car lat) (no-nums (cdr lat)))))))
(no-nums '(1 2 3 h a c 4 k 5 e 6 r))
;(h a c k e r)

やったね。
煮詰まったらしばらく離れるといいみたい。