Оваа идеја ја добив од стрипот Hofstadter на XKCD ; кој е најдобриот начин да се создаде условна јамка во (кој било) дијалект Lisp што извршува функција сè додека не се врати NIL
во кое време ги собира вратените вредности во список.
За оние кои не ја видов шегата, се работи дека автобиографијата на Даглас Хофстадер со „осум зборови“ се состои од само шест зборови: „Јас сум толку мета, дури и овој акроним“ што содржи продолжение на шегата: (необичен мета-парапросдокијан?) „Дали е Мета“ - шегата е дека автобиографијата е всушност „Јас сум толку мета, дури и овој акроним е мета“. Но, зошто да не одиме подлабоко?
Претпостави ја акронимизирачката функција META
што создава кратенка од низа и ја дели на зборови, враќа NIL
ако низата содржи само еден збор:
(meta "I'm So Meta, Even This Acronym") ⇒ "Is Meta"
(meta (meta "I'm So Meta, Even This Acronym")) ⇒ "Im"
(meta (meta (meta "I'm So Meta, Even This Acronym"))) ⇒ NIL
(meta "GNU is Not UNIX") ⇒ "GNU"
(meta (meta "GNU is Not UNIX")) ⇒ NIL
Сега барам како да имплементирам функција така што:
(so-function #'meta "I'm So Meta, Even This Acronym")
⇒ ("I'm So Meta, Even This Acronym" "Is Meta" "Im")
(so-function #'meta "GNU is Not Unix")
⇒ ("GNU is Not Unix" "GNU")
Кој е најдобриот начин да се направи тоа?