M식에 의한 Lisp1.5

1877 단어 Elixir


소개



어쩐지 생각하고, Elixir에서 Lisp1.5 상당의 인터프리터를 만들었습니다.

M식



소개 Lisp에 접한 것이 나카니시 마사카즈 선생님의 책이었기 때문에, M식에 애착이 있습니다. Lisp1.5 사용자 매뉴얼의 M식 표현을 받아들이는 처리계로 하고 있습니다.

컴파일러



시간이 지나면 Elixir로 변환하는 유형의 컴파일러도 생각합니다.

시작



GitHub에 놓여있는 코드를 복제하면 mix elxlisp로 시작합니다.
mix elxlisp
Lisp 1.5 in Elixir
? cons[A;B]
(A . B)
? length[(1 2 3)]
3
? quit[]
"goodbye"


코드 예



test.meta 파일에 간단한 M식 코드를 수록하고 있습니다.
fact[n] = [eq[n;0]->1;
          T->times[n;fact[sub1[n]]]]

member[a;x] = [null[x]->F;
               eq[a;car[x]]->T;
               T->member[a;cdr[x]]]

union[x;y] = [null[x]->y;
              member[car[x];y]->union[cdr[x];y];
              T->cons[car[x];union[cdr[x];y]]]

intersection[x;y] = [null[x]->NIL;
                     member[car[x];y]->cons[car[x];intersection[cdr[x];y]];
                     T->intersection[cdr[x];y]]

maplist[x;fn] = [null[x]->NIL;
                 T->cons[fn[car[x]];maplist[cdr[x];fn]]]

? load["test.meta"]
T
? fact[10]
3628800
? intersection[(A B C);(D C A)]
(A C)
?

환경



원래 Lisp1.5에서는 환경이 연상 목록입니다. 그러나 Elixir의 기능을 활용하기 위해 키워드 목록입니다.

Lisp 1.5 in Elixir
? eval[cons[x;y];({x 1}{y 2})]
(1 . 2)
?


K 선생님, 죄송합니다.



떠올랐다. K선생님은 M식이 싫었던 것이었습니다.
놀이 프로그래밍입니다. 용서해, 선생님.

코드



Github에 있습니다. 기분이 좋을 때에도 개량합니다.
htps : // 기주 b. 코 m/사사가와 888/에 lxぃsp

좋은 웹페이지 즐겨찾기