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

28 июня 2014 года

Опубликован интерпретатор 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

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Реализация языка Lisp на GNU sed», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.