Пользователь
0,1
рейтинг
29 июня 2014 в 01:29

Разработка → Интерпретатор Lisp на GNU/sed

Интерпретатор Lisp на python в одну строчку? Слишком скучно.

Японский программист, инженер Google Shinichiro Hamaji написал его на sed. Sed — потоковый текстовый редактор, представляющий из себя простой язык программирования. В нем нет переменных, есть только примитив GOTO и выполняющие ветвление функциональные возможности; тем не менее он обладает полнотой по Тьюрингу.

Реализация занимает всего 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

Репозиторий на Github
Алексей @tyderh
карма
35,0
рейтинг 0,1
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (8)

  • +4
    Если давно экстрима на продакшене не хватало, пора внедрять. Маст-хев однозначно!
  • +2
    Интересно, а есть sed, написанный на sed?
    • +1
      Нет. Нету. Но вы можете написать.
  • +2
    Когда-то видел тетрис, написанный на sed.
  • +2
    Реализация на Befunge от этого же автора выглядит куда изощренней.
    • +1
      А как же
      beflisp.bef is the Lisp interpreter in Befunge. This Befunge code is generated from lisp.c with clang and bc2bef.cc, which is a translator from LLVM bit code to Befunge.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.