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
Reference
이 문제에 관하여(M식에 의한 Lisp1.5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sym_num/items/4f691efa56f4d1b6554c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
소개 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
Reference
이 문제에 관하여(M식에 의한 Lisp1.5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sym_num/items/4f691efa56f4d1b6554c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
Reference
이 문제에 관하여(M식에 의한 Lisp1.5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sym_num/items/4f691efa56f4d1b6554c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
Reference
이 문제에 관하여(M식에 의한 Lisp1.5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sym_num/items/4f691efa56f4d1b6554c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Github에 있습니다. 기분이 좋을 때에도 개량합니다.
htps : // 기주 b. 코 m/사사가와 888/에 lxぃsp
Reference
이 문제에 관하여(M식에 의한 Lisp1.5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sym_num/items/4f691efa56f4d1b6554c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)