- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Peter Norvig 的 PAIP 书籍包含此 code作为排列问题的解决方案(为简洁起见,删除了某些部分)
(defun permutations (bag)
;; If the input is nil, there is only one permutation:
;; nil itself
(if (null bag)
'(())
;; Otherwise, take an element, e, out of the bag.
;; Generate all permutations of the remaining elements,
;; And add e to the front of each of these.
;; Do this for all possible e to generate all permutations.
(mapcan #'(lambda (e)
(mapcar #'(lambda (p) (cons e p))
(permutations (remove e bag))))
bag)))
mapcan
?
最佳答案
除了上面已经解释过的一些小区别之外,重要的是 mapcan
和 mapcar
是循环函数。所以双lambda
可以简单地解释为循环中的循环。
您可以将其重写为
(dolist (e bag)
(dolist (p (permutations (remove e bag)))
(cons e p) ))
在这个骨架中,您仍然缺少如何累积结果。可以这样做,例如作为
(defun permutations (bag)
(if (null bag) (list bag)
(let* ((res (list 1)) (end res))
(dolist (e bag (cdr res))
(dolist (p (permutations (remove e bag)))
(rplacd end (list (cons e p)))
(pop end))))))
mapcan
也是如此。和
mapcar
,更优雅,在 Norvig 的版本中。但我希望这个解释能让你更清楚。
关于recursion - 了解 Peter Norvig 在 PAIP 中的置换解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59340194/
Peter Norvig 的著名作品 spellchecker (Java 8 版本 here )能够纠正单个单词,如果训练数据中出现与该单词接近的内容。但是我该如何调整它来处理整个短语。例如,如果我
在彼得诺维格的 PAIP ,第 18.12 节,第。 643(不幸的是不是谷歌图书预览的一部分),他包括二维数组,如: (/ (aref '#2A((.1 .4 .7)
在 Peter Norvig 的人工智能编程范式的练习 1.2 中,要求读者 Write a function to exponentiate, or raise a number to an int
Peter Norvig 的 PAIP 书籍包含此 code作为排列问题的解决方案(为简洁起见,删除了某些部分) (defun permutations (bag) ;; If the input
我看到了 Michael Sparks 对 Peter Norvig's Spell Checker 的非常有趣的剖析在伦敦举行的 SO DevDays 上,这让我想知道是否有人尝试用另一种语言(例如
在阅读 Peter Norvig 的 Python IAQ 时,我遇到了这个代码片段: def _if(test): return lambda alternative: \
我想了解 Peter Norvig 的拼写校正器是如何工作的。 关于他的 jupyter-notebook 标题 here他解释说,如何在没有空格分隔单词的情况下分割字符序列。它工作正常,当顺序中的所
我是一名优秀的程序员,十分优秀!