Может ли кто-нибудь, хорошо разбирающийся в шепелявлении, объяснить мне эту шутку? Я читал о языках функционального программирования и знаю, что CAR / CDR означает содержимое регистра адреса / декремента, но я до сих пор не совсем понимаю юмор.
Может ли кто-нибудь, хорошо разбирающийся в шепелявлении, объяснить мне эту шутку? Я читал о языках функционального программирования и знаю, что CAR / CDR означает содержимое регистра адреса / декремента, но я до сих пор не совсем понимаю юмор.
Ответы:
В Лиспе элемент связанного списка называется CONS. Это структура данных с двумя элементами, которые по историческим причинам называются CAR и CDR. (Некоторые программисты на Common Lisp предпочитают обращаться к ним с помощью функций FIRST и REST, в то время как другим нравится CAR и CDR, потому что они хорошо подходят для предварительно составленных версий, таких как (CADR x) ≡ (CAR (CDR x)).
Шутка - это пародия на наклейки на бампере, которые иногда можно увидеть на потрепанных старых машинах, с надписью «Другая моя машина - Porsche / BMW и т. Д.».
Мой ответ на эту шутку всегда был «Мой другой CAR является CADR. CDR не CAR на всех.»
(rplacd a (car a))
этого явно не будет. :) Обычный LISP - это не Haskell. Но спасибо за объяснение. +1.
car
IS first
». :)
Да, определенно шутка компьютерных фанатов.
Названия взяты от IBM 704, но это не шутка.
Шутка - это (плохой) каламбур на тему «другая моя машина ___». Но шутка о рекурсии.
Когда вы зацикливаете / манипулируете / выбираете / вызываете / больше в lisp, вы используете комбинацию car (первый элемент в списке) и cdr (остальная часть списка) для манипулирования функциями.
Итак, у вас есть машина, но другая ваша машина - это ваш cdr, потому что вы всегда можете получить машину с cdr, поскольку cdr всегда (в рекурсии) содержит больше элементов. Возьми? Смеетесь еще?
Вам, вероятно, придется научиться шепелявить, чтобы немного посмеяться, или нет. Конечно, к тому времени вы, вероятно, обнаружите, что беспорядочно хихикаете без видимой причины, потому что:
Lisp делает вас зацикленным.
// Исходя из схемы
схемы имеет очень мало структур данных, один из них является кортежем: '(first . second)
. В этом случае car
- это первый элемент, а cdr
- второй. Эта конструкция может быть расширена для создания списков, деревьев и других структур.
Шутка не очень смешная.
(first . second)
. Список '(first second)
состоит из двух кортежей, например:(cons first (cons second null))