Хтось, хто добре розбирається в шепелявості, може пояснити мені цей жарт? Я прочитав кілька функціональних мов програмування і знаю, що CAR / CDR означає Зміст Адреси / Реєстру зменшень, але я все ще не розумію гумору.
Хтось, хто добре розбирається в шепелявості, може пояснити мені цей жарт? Я прочитав кілька функціональних мов програмування і знаю, що CAR / CDR означає Зміст Адреси / Реєстру зменшень, але я все ще не розумію гумору.
Відповіді:
У Lisp зв’язаний елемент списку називається 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))