2011-01-03 14 views
11

Powiel możliwe:
How many primitives does it take to build a LISP machine? Ten, seven or five?Najbardziej minimalny LISP?

Jestem ciekawy. Jaki jest najbardziej minimalny LISP, na którym można zbudować wszystkie dalsze funkcje? Ignoruj ​​efektywność - pytanie pochodzi po prostu z elegancji.

Jeśli obudziłeś się na obcej planecie i zostałeś poinstruowany, aby zbudować najbardziej minimalny LISP, na którym mógłbyś później zbudować, aby zaimplementować jakąś ulubioną funkcję, co byś w nim uwzględnił?

Edytuj: Poprawka. Moją intencją tutaj nie jest rozpoczynanie debaty, raczej rozważam wdrożenie minimalnego LISP-a i chcę zrozumieć, jak minimalna mogę przejść, jednocześnie pozwalając, aby język, który stosuję, był kompletny Turinga itd. Jeśli to okaże się kontrowersyjne, Jestem pewien, że dowiem się, czego chcę się nauczyć od obserwacji kontrowersji. :). Dzięki!

+0

Jak to jest subiektywne? Może to być duplikat (chyba raz widziałem podobne pytanie, teraz przejdę do wyszukiwania). – delnan

+1

Znaleziono: [Ile prymitywów potrzeba do zbudowania maszyny LISP? Dziesięć, siedem czy pięć?] (Http://stackoverflow.com/questions/3482389/how-many-primitives-does-it-take-to-build-a-lisp-machine-ten-seven-or-five) (Ma również link do innego pytania, które również dotyka tego tematu). – delnan

+0

Czy chcesz uzyskać minimalną liczbę operacji dla języka, które mają być ukończone lub móc zdefiniować wszystkie funkcje językowe, które można znaleźć? w powszechnym seplenieniu? – sepp2k

Odpowiedz

4

Peter Norvig zaimplementował interpreter LISP w 90 wierszach Pythona, a jego kolejny artykuł omawia szczegółowo, o co prosisz. Warto przeczytać, IMHO.

http://norvig.com/lispy.html

Mam wrażenie, że jego „sekwencjonowanie” szczególna forma może zostać usunięty, jeśli tylko wywołania funkcji może trwać dowolną liczbę parametrów.

(defun last (lst) 
    (if (cdr lst) 
     (last (cdr lst)) 
     (car lst))) 

(defun begin (:rest y) (last y)) 

Ale to skomplikowałoby zastosowanie funkcji.