- PVSM.RU - https://www.pvsm.ru -
Интерпретатор Lisp на python [1] в одну строчку [2]? Слишком скучно.
Японский программист, инженер Google Shinichiro Hamaji [3] написал его на sed. Sed — потоковый текстовый редактор, представляющий из себя простой язык программирования. В нем нет переменных, есть только примитив GOTO и выполняющие ветвление функциональные возможности; тем не менее он обладает полнотой по Тьюрингу.
Реализация [4] занимает всего 600 строчек.
Выглядит это примерно так:
$ 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
Автор: tyderh
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/63649
Ссылки в тексте:
[1] Интерпретатор Lisp на python: http://habrahabr.ru/post/227119/
[2] одну строчку: http://habrahabr.ru/post/227119/#comment_7715407
[3] Shinichiro Hamaji: https://github.com/shinh
[4] Реализация: https://github.com/shinh/sedlisp/blob/master/sedlisp.sed
[5] Репозиторий на Github: https://github.com/shinh/sedlisp/
[6] Источник: http://habrahabr.ru/post/227983/
Нажмите здесь для печати.