Здравствуйте, Klapaucius, Вы писали:
K>типа того, это история довольно специфического подмножества фя. в предисловии более подробно написано почему это не история лиспа, но вообще про лисп там довольно много написано. в основном, правда, для объяснения того, почему нельзя было вот так просто взять компилятор лиспа и использовать для имплементации фя из этого специфического подмножества.
Более того, критерии того, что считать ФЯ, а что не считать, они не отлиты еще в бронзе.
Допустим, мы вполне можем считать за ФЯ тот язык, где есть полная оптимизация хвостового вызова. А чем не критерий? Да, и не сильно разойдется с привычным списком языков ФП.
Так вот, в такой реализации Common Lisp как SBCL есть полноценная оптимизация хвостового вызова. Это означает, что бесконечный цикл, записанный через макрос cl-cont, будет работать бесконечно долго в этой реализации CL.
Для сравнения, в clojure и Scala никакой бесконечный цикл, записанный через CPS (continuation passing style), работать бесконечно долго не может, и скорее всего, что никогда не будет. Там просто сожрет весь стек. Кстати, пожалуй, это главная причина, почему в Scala прикрыли плагин продолжений.
Так что, не будем делать окончательных выводов. Впрочем, у тебя свое собственное определение ФЯ. Скажем, язык такой-то удовлетворяет необходимым требованиям называться "ФЯ по Клапацию". Вот, к такому определению у меня вопросов никаких нет