>>11749> Как в реальной программе будет выполняться это apply?
Когда парсер будет читать программу (например, такую: "
(ehal (spisok) cherez (spisok))
"), он автоматически будет возвращать функцию, которая будет соответстовать за-
list-енной этой программе (в нашем примере это будет: "
f =
apply(
list,
ehal,
apply(
list,
spisok),
cherez,
apply(
list,
spisok))"). Потом интерпретатор сделает этой функции
eval ("
apply(
eval(
f))) =
apply(
ehal, ...)") и начнется магия.
> Почему тогда все языки типизированы, что в чистом лямбда-исчислении их создатели увидели плохого?
UPD: Твою мать! Не выражается
apply графом на одних только функциях! Новый положняк:
apply можно представить в виде направленного графа, вершинами которого являются функции и кортежи функций (см. рис.). Не множества, заметьте, а кортежи.
Так вот, языки все типизированы потому, что хрен ты реализуешь бестиповое лямбда-исчисление так, чтобы в итоге получилось без летающих дилд.
А вообще, я сам не знаю, типизированное или бестиповое у меня. Ну, смотри сам: оператор
apply у меня полностью полиморфен (в бестиповом ЛИ его поведение определяется только первым аргументом - лямбдой; у меня же определяется всеми аргументами); плюс рёбра
apply-графа определены не для всех вершин (далеко не для всех), а только для определённых. Наверно, это все-таки типизированное (и я поначалу ошибся), потому что далеко не для всех сочетаний лямбд и их аргументов определена лямбда-результат. Да, это, наверно, "лямбда-пэ-омега". Очень похоже. Короче, лямбда-самцы, классифицируйте мне мою систему. Не знаю я.
> Наконец, что тебя натолкнуло на изложенную идею?
Я просто хотел придумать моноиконичный LISP. Начал выбрасывать сущности одну за другой, в итоге осталась одна единственная операция.
>>11750> как этот язык реализовать?
Очень просто же. Нужно реализовать мутабельный направленный граф на атомах и кортежах атомов. Понятно, что не в лоб; можно использовать свойства этого графа: 1) его ребра всегда соединяют либо атом с кортежом, либо кортеж с атомом; 2) кортежи всегда задаются семействами; 3) другие свойства, которые удастся обнаружить пытливому уму
код реализатора. Ах да, граф должен быть клонируемым - контексты выполнения же.
Самая проблема, ИМХО, будет в кортежах атомов. Фактически, эти кортежи - это ограничения на аргументы функций. Но задавать-то ограничения можно по-разному, в том числе и в выражениях самого языка (как я и хочу), то есть, опять же, через
apply-граф. В общем, возникает какая-то жуткая метациркулярность, об которую у меня ломается мозг. С другой стороны, можно же не усираться над реализацией "лямбда-пэ-омеги", а сделать поначалу "лямбда-2" или вообще "лямбда-стрелку".
Лол, что за хуйню я пишу? Wait, тема треда, oh shi~