Lispy and Rispy
Oct. 5th, 2010 01:40 amПитер Норвиг зачем-то написал на Питоне интерпретатор небольшого подмножества Схемы в 90 строк кода. Дабы слегка посрамить этот гадкий питон, я перевел Норвиговский интерпретатор на Руби и заодно добавил туда поддержку продолжений, важной фичи Схемы, которую в питоний интепретатор должно быть вставить заметно сложнее. Такой вот пример
выдает 1, 2, 120. Здесь return - не конструкция языка, а имя переменной, получающей текущее продолжение.
Выложил здесь.
Получилось всего 60 строк. Let the срачь begin! ;)
(begin
(define fact (lambda (n)
(if (<= n 1) 1 (* n (fact (- n 1))))))
(define f (lambda (return)
(begin
(return 2)
1)))
(display (f (lambda (x) x)))
(display (callcc f))
(fact 5)
)
выдает 1, 2, 120. Здесь return - не конструкция языка, а имя переменной, получающей текущее продолжение.
Выложил здесь.
Получилось всего 60 строк. Let the срачь begin! ;)