Реализация языка Lisp на GNU sed

Опубликован интерпретатор Lisp, написанный с использованием языка утилиты GNU sed. Реализация занимает около 600 строк кода.
Поддерживаются следующие функции, операторы и выражения: car,
cdr,
cons,
eq,
atom,
+, -, *, /, mod,
neg?,
print,
quote,
if,
lambda,
defun и
define.

$ sed -f sedlisp.sed  
 (car (quote (a b c)))
a
 (cdr (quote (a b c)))
(b c)
 (cons 1 (cons 2 (cons 3 ())))
(1 2 3)
 (defun fact (n) (if (eq n 0) 1 (* n (fact (- n 1)))))
(lambda (n) (if (eq n 0) 1 (* n (fact (- n 1)))))
 (fact 10)
3628800
 (defun fib (n) (if (eq n 1) 1 (if (eq n 0) 1 (+ (fib (- n 1)) (fib (- n 2))))))
(lambda (n) (if (eq n 1) 1 (if (eq n 0) 1 (+ (fib (- n 1)) (fib (- n 2))))))
 (fib 12)
233
 (defun gen (n) ((lambda (x y) y) (define G n) (lambda (m) (define G (+ G m)))))
(lambda (n) ((lambda (x y) y) (define G n) (lambda (m) (define G (+ G m)))))
 (define x (gen 100))
(lambda (m) (define G (+ G m)))
 (x 10)
110
 (x 90)
200
 (x 300)
500

  

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.