- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
int main() {
interpretator_t i;
i.eval(
{let, "factorial_helper", {quote, {"this", "num"},
{if_, {eq_, {"num"}, 0}, 1, {mul_, {"num"}, {{"this"}, {"this"}, {sub_, {"num"}, 1}}}}
},
{let, "factorial", {quote, {"num"}, {{"factorial_helper"}, {"factorial_helper"}, {"num"}}},
{do_,
{write_, "vvedite chislo: "},
{assign_, "x", {to_number_, {read_}}},
{write_, "factorial: "},
{write_, {{"factorial"}, {"x"}}},
{write_, "\n"}
}
}}
);
return 0;
}
Смотрите, какой лисп я написал. Он еще и ленивый.
ЗЫ и лисп не ленивый.
Лол что? Что такое lisp? Что мне мешает реализовать диалект с отложенными вычислениями?
Браво! Ответ настоящего лиспщика!!! ;-)
Лиспера
Дело в том, что не существует языка программирования Lisp. Есть семейство языков с похожими идеями, слово Lisp никак не описывает семантику. Четвёртая глава SICP же.
Чувствую что на какой-то ваш внутренний холивар нарываюсь, но все таки спрошу: Common Lisp?
У Scheme тоже периодически стандарты выходят.
Является ли CL лиспом? Да.
Является ли Scheme лиспом? Да.
Является ли Clojure лиспом? Да.
Является ли ELisp лиспом? Да.
При этом никакие два диалекта толком не совместимы, семантика во многом различается. Например, есть понятия Lisp1 (Scheme, Clojure) и Lisp2 (CL, Elisp).
В общем, Lisp - это семейство, основанное на общих идеях, но каждый представитель обладает собственной семантикой.
Можно сделать лисп, обладающий семантикой эрланга (http://lfe.io/), можно использовать семантику пролога, можно добавить строгой типизации и получить Хаскелл со статической проверкой типов и горой скобок.
Замечу что тут нет критической массы лисперов для холивора какой из двух подходов лучше: с отдельным неймспейсом или без, как например в js.
Никакой.
Для языка общего назначения больше подходит Lisp1, т.к. он гораздо прозрачнее и предсказуемее.
Для специализированных применений Lisp2 предоставляет больше приятных возможностей. Например, в Elisp к произвольным символам можно аттачить не только функции, но и доку, например (примерно как __doc__ в пистоне).
Только к функциям же.
- снова немного понекропощу. А какой лисп из коробки предлагает статическую поверку типов, да так, чтобы это было production ready? typed/racket не предлагать
для тех, кто любит пожощще, ага?
надо было на шаблонах в compile time