А не задумывались ли вы, что quote и lambda по сути ничем не отличаются. Я тут сразу отбрасываю математический смысл, лексическую область и прочее, это непосредственно к лиспу отношения не имеет. Например
(define a (quote 1))
(define a (lambda() 1))
(eval a)
(a)
Тут одна и та же семантика. Просто задержка вычислений. Разница в том, что quote принимает только 1 аргумент. Я давно думал об этом, с помощью лямбд можно эмулировать поведение quote. В picolisp, собственно, и нет разницы, там lambda вообще выкинута. Понятное дело, что сейчас, в связи с модой на ФП, с лямбдой связывают кучу всяких заклинаний. Но ведь вплоть до схемы этой всей ФП-лабуды в лиспах не было. Получается, что Маккарти ввел лишнюю сущность в язык. Этот вопрос где нибудь обсуждается? Кто-нибудь видел какие-нибудь бумаги? Может быть, это было простой ошибкой дизайна, которую не успели выпилить и она исторически прижилась?
Ты охуярок малолетний на примеры в этом треде посмотри. И иди на хуй, я спать уже хочу, я проводить ликбезы тыпым мартышкам не нанимался. И совет тебе напоследок иди, блять, учи хашкел или плюсы. Лисп, он не для дебилов, не потянешь ты его, мозг у тебя не так устроен.
Я правильно понял, что в пике (quote (a b) (+ a b)) раскрывается в ((a b) (+ a b)), что в свою очередь является способом традиционной записи (lambda (a b) (+ a b)) ?
Нет. Ее можно реализовать через quote если quote будет забирать более 1 аргумента. Это одно и то же, фактически.
Нет, это не одно и то же. Чтобы убедиться в этом - реализуй мне y-кмобинатор (для него нужны только лямбды с одним аргументом)
Да это обычный факториал, в picolisp нет никакой лямбды, там quote может принимать более одного аргумента, и он используется вместо лямбды.
Лол. Этот quote из твоего примера - это и есть лямбда, а никакой не не quote. Естественно, если сделать (define quote labmda), то quote не будет отличаться от лямбды.
1. (quote (a b) (+ a b))
2. Раскрывается в ((a b) (+ a b))
3. Что есть форма записи анонимной функции, т.е. лямбды.
4. Таким образом, хоть ключевого слова lambda у нас нет, сама лямбда у нас используется.
5. И как тогда ты собираешься вызвать (quote (a b) (+ a b)), не умей язык лямбду?
Так в каком месте я неправ? Если что, я пику совсем не знаю и исхожу из того, что выше мою цепочку рассуждений ты назвал верной.
Что ты называешь «уметь лямбду»? Суть этой функции quote в том, чтобы задерживать вычисления. Это все, что она делает. Но в отличии от традиционного quote она берет более одного аргумента.
Да не сможешь. самомодификация в рантайме в твоем CL не предусмотрена. Не знаю, может через кучу костылей реализуешь жалкое подобие, я хз.
нифига не понятно
Это newlisp. Вот по такому принципу это работает,
(set 'f
(lambda()
(begin (print "Hi for the "
(inc counter)
". time. ")
(push (last f) f -1)
(if (> (length f) 3)
(pop f 1)))))
(f)
Hi for the 1. time.
Hi for the 2. time.
Hi for the 3. time.
Hi for the 4. time.
...
Что ты называешь «уметь лямбду»? Суть этой функции quote в том, чтобы задерживать вычисления. Это все, что она делает. Но в отличии от традиционного quote она берет более одного аргумента.
Я очень рад за нее, но как ты можешь утверждать, что quote и lambda — одно и то же, если в частном случае quote в эту самую лямбду и раскрывается? Лямбдой я называю дурацкий синтаксис ((a b) (+ a b)), который и заморочил тебе голову.
То есть в твоем лиспе в действительности есть и quote, и лямбда. И каждый занимается своим делом. Первая откладывает вычисления (в твоей терминологии), вторая создает анонимную функцию. И из-за синтаксиса записи лямбды ты решил, что quote сама может использоваться для задания функции. Не стоит и говорить об ошибочности дальнейших выводов о том, что сама лямбда может использоваться для отложения вычислений.
Надеюсь, теперь доходит, как пиковый сахарок жидко обосрался в твоем мозгу?
Что значит не нужны? quote и lambda - совершенно разные формы и их семантика никак не связана. quote нельзя выразить через lambda, lambda нельзя выразить через quote.
Нет, неправильно. И, еще раз - прочитай что такое quote и что такое lambda. Когда прочитаешь - докажи, что quote НЕ эквивалентно lambda. Считай это домашним заданием. Пока ты не поймешь,бепочему quote не эквивалентно lambda - тем нет смысла дальше иметь дело с лиспом, потому как ты ничего не поймешь.
Ты доказал что в одном конкретном случае lambda ведет себя так же как quote. Это ни у кого и так не вызывает сомнения. Но всем понятно, что лямбда и quote - разные вещи, котоыре нельзя выразить друг через друга. Докажи, чот это так.
Еще раз - твоя задача не опровергнуть, а ДОКАЗАТЬ это. То, что lambda != quote - это факт, он всем известен. Не пытайся опровергнуть то, что 2*2=4.