Интерпретатор 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

    Комментарии 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.

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

          Самое читаемое