Мне интересно, почему не работают вызовы вложенных функций.
Я реализую модель Дибвига на основе кучи из его статьи http://www.cs.indiana.edu/~dyb/pubs/3imp.pdf Глава 3.
Я делаю это в JavaScript. Источник здесь: http://github.com/z5h/zb-lisp
Почти все сейчас в parser.js.
Для запуска,
- загрузить test.html в Firefox с помощью Firebug.
- Evaluator.newEvaluator (). Eval («код схемы идет сюда»);
- Оставьте немного пробела в конце кода, так как парсер сейчас немного сломан и полагается на пробел в конце. (Быть исправленным). например
.eval("12 ")
не .eval("12")
Много вещей работает. Но у меня проблемы с вызовами вложенных функций:
Это работает и возвращает 5
:
(set! i (lambda (x) x)) (set! ii (i i)) (ii 5)
Это не работает:
(set! i (lambda (x) x)) (i (i 5))
И при этом это:
(set! i (lambda (x) x)) ((i i) 5)
Проблема может быть в строке 577, где вложенный вызов компилируется, или, возможно, в коде для фрейма или применения. В разделе 3.4.2 документа PDF приводится пример реализации.
Это довольно сложный вопрос. Код имеет много неровностей.
Любой вклад приветствуется.
Я с удовольствием отвечу на любые вопросы моей реализации.