Что не так с моим компилятором Scheme? - PullRequest
2 голосов
/ 25 февраля 2010

Мне интересно, почему не работают вызовы вложенных функций.

Я реализую модель Дибвига на основе кучи из его статьи http://www.cs.indiana.edu/~dyb/pubs/3imp.pdf Глава 3.
Я делаю это в JavaScript. Источник здесь: http://github.com/z5h/zb-lisp
Почти все сейчас в parser.js.

Для запуска,

  1. загрузить test.html в Firefox с помощью Firebug.
  2. Evaluator.newEvaluator (). Eval («код схемы идет сюда»);
  3. Оставьте немного пробела в конце кода, так как парсер сейчас немного сломан и полагается на пробел в конце. (Быть исправленным). например .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 приводится пример реализации.

Это довольно сложный вопрос. Код имеет много неровностей.
Любой вклад приветствуется.

Я с удовольствием отвечу на любые вопросы моей реализации.

1 Ответ

0 голосов
/ 26 февраля 2010

Оказывается, я рано очищал ребро значения.

Улучшенный код доступен на моем github.

...