我从XKCD的Hofstadter漫画中得到了这个想法; 什么是在(任何)Lisp方言中创建条件循环的最佳方法,该方法执行函数,直到它返回NIL,同时它将返回的值收集到列表中.
对于那些没有看过这个笑话的人来说,道格拉斯·霍夫施塔特的"八字"自传只包含六个词:"我就是这样的元,甚至这个缩写",包含了这个笑话的延续:(一些奇怪的meta-paraprosdokian ?)"是元" - 笑话是自传实际上是"我是如此元,甚至这个缩写是元".但为什么不深入呢?
假设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
Run Code Online (Sandbox Code Playgroud)
现在我正在寻找如何实现一个功能,以便:
(so-function #'meta "I'm So Meta, Even This Acronym")
? ("I'm So Meta, Even This Acronym" "Is Meta" "Im") …Run Code Online (Sandbox Code Playgroud)