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

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


lambda が二回続けてくるなんて想像もしてなかった。
結構悩んだ挙句、lambda 周りの処理を大きく修正。

lambda が出現したときのみ環境変数から展開するといいのかな。
applyだけしてevalしないように修正してみた。

    public static Sexp lambdaApplys(Sexp sexp, Map<String, Sexp> env){
        if(sexp instanceof Cell){
            Sexp[] sexps = ((Cell)sexp).getSexps();
            Sexp[] bufs = new Sexp[sexps.length];
            for(int i = 0 ; i < sexps.length ; i++){
                bufs[i] = lambdaApplys(sexps[i], env);
            }
            return new Cell(bufs);
        }else{
            if( env.containsKey(sexp.toString()) ){
                return env.get(sexp.toString());
            }else{
                return sexp;
            }
        }
(define eq?-c
  (lambda (a)
    (lambda (x)
      (eq? x a))))
((eq?-c 'salada) 'salada)
;#t

やっとうごいたー