> 1 <

Автор Сообщение

Z1kker

Members


Статус

1 сообщений

Где: ---
Род занятий:
Возраст:

#529   2009-07-22 13:59 GMT+3 часа(ов)      
Кто-нибудь, объясните, как написать интерпретатор лиспа в Паскале?

love5an

Members


Статус

25 сообщений

Где: Russia
Род занятий:
Возраст:

#539   2009-07-23 21:02 GMT+3 часа(ов)      

antares0

Members


Статус

175 сообщений

Где: Russia
Род занятий:
Возраст:

#543   2009-07-23 21:48 GMT+3 часа(ов)      
Тогда уж sicp в переводе.
Когда-то я видел исходники маленького лиспа (не common) на с правда. Если оно каому-то надо могу повспоминать где.

_lee

Members


Статус

69 сообщений

Где: Russia
Род занятий:
Возраст:

#545   2009-07-24 10:52 GMT+3 часа(ов)      
Интерпретатор классического Лиспа на самом Лиспе (правда это было еще до скобочнго синтаксиса) был написан Макарти в 1959 и занимал 1 страницу
правда там не было даже чисел, только символы:

 
evalquote[fn;x] = apply[fn;x;NIL]
 
where
 
apply[fn;x;a] =
[atom[fn] -> [eq[fn;CAR] -> caar[x];
eq[fn;CDR] -> cdar[x];
eq[fn;CONS] -> cons[car[x];cadr[x]];
eq[fn;ATOM] -> atom[car[x]];
eq[fn;EQ] -> eq[car[x];cadr[x]];
T -> apply[eval[fn;a];x;a]];
eq[car[fn];LAMBDA] -> eval[caddr[fn];parlis[cadr[fn];x;a]];
eq[car[fn];LABEL] -> apply[caddr[fn];x;cons[cons[cadr[fn];
caddr[fn]];a]]]
 
eval[e;a] = [atom[e] -> cdr[assoc[e;a]];
atom[car[e]] ->
[eq[car[e],QUOTE] -> cadr[e];
eq[car[e];COND] -> evcon[cdr[e];a];
T -> apply[car[e];evlis[cdr[e];a];a]];
T -> apply[car[e];evlis[cdr[e];a];a]]
 
evcon[c;a] = [eval[caar[c];a] -> eval[cadar[c];a];
T -> evcon[cdr[c];a]]
 
evlis[m;a] = [null[m] -> NIL;
T -> cons[eval[car[m];a];evlis[cdr[m];a]]]
 
 
 


думаю, любой программер сможет перевести это на другой язык, а потом постепенно дописывать.
> 1 <


Онлайн :

0 пользователь(ей), 15 гость(ей) :




Реклама на сайте: