- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 CL 有点陌生,目前正试图绕过 mapcan
, #'
, funcall
和关闭。
这是一个闭包,它将谓词应用于数字 n,如果正确,则返回 (list n)
, 否则 nil
:
(defun all-those (predicate)
(lambda (n)
(if (funcall predicate n) (list n))))
funcall
把这个闭包变成一个函数。这工作正常:
> (funcall (all-those #'evenp) 8)
(8)
> (mapcan #'(funcall (all-those #'evenp)) '(1 2 3 4))
(FUNCALL (ALL-THOSE #'EVENP)) is not a legal function name
.
#'
就可以了以及
funcall:
> (mapcan (all-those #'evenp) '(1 2 3 4))
(2 4)
mapcan
时需要对函数进行尖锐引用。遵循符号的函数绑定(bind) (*) 并且我需要调用
funcall
当“关闭关闭”时。
#'
和
funcall
正在相互抵消,或者为什么我必须在上面的示例中省略它们?提前感谢您的任何回复。
mapcan
我仍然需要引用它:
(mapcan #'(lambda ...
最佳答案
至 map 车 , 电话 等,您需要传递函数对象或符号。如果你传递一个符号,那么 符号函数 符号的用作函数。如果你传递一个函数对象,那么它被用作函数。
您的 所有这些函数返回一个函数。这意味着 (mapcan(所有这些……)……)很好。
尖引号( #' )只是 的简写。功能 形式。也就是说, #'富与 相同(函数 foo) :
The value of function is the functional value of name in the current lexical environment.
If name is a function name, the functional definition of that name is that established by the innermost lexically enclosing flet, labels, or macrolet form, if there is one. Otherwise the global functional definition of the function name is returned.
If name is a lambda expression, then a lexical closure is returned. In situations where a closure over the same set of bindings might be produced more than once, the various resulting closures might or might not be eq.
#'(funcall (all-those #'evenp))
Now I'm confused. It was my understanding that I need to sharp-quote a function when using mapcan to follow the symbol's function binding (*) and that I need to call funcall when "closing a closure".
function---a designator for a function that must take as many arguments as there are lists.
function designator n. a designator for a function; that is, an object that denotes a function and that is one of: a symbol (denoting the function named by that symbol in the global environment), or a function (denoting itself). The consequences are undefined if a symbol is used as a function designator but it does not have a global definition as a function, or it has a global definition as a macro or a special form. See also extended function designator.
(mapcan (all-those …) …)
(mapcan (lambda (x) ...) ...)
(mapcan #'(lambda (x) ...) ...)
(mapcan 'car ...)
(mapcan #'car ...)
(mapcan (symbol-function 'car) ...)
关于closures - mapcan,尖锐的报价和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40537364/
我对 CL 有点陌生,目前正试图绕过 mapcan , #' , funcall和关闭。 这是一个闭包,它将谓词应用于数字 n,如果正确,则返回 (list n) , 否则 nil : (defun
我有两个列表:(1 2 3) 和 (a b) 我需要创建这样的列表 (1 2 3 1 2 3) 。结果是第一个列表的串联次数与第二个列表中的元素数一样多。我应该使用一些功能(maplist/mapca
为了简化我的问题:为什么这行得通 (mapcan #'(lambda (l) (list '1 '2) ) '(a b)) 这不是 (mapcan #'(lambda (l) '(1 2) ) '(a
我的教授在 clisp 中给了我们一个复习作业。一个练习是通过三种方式实现相同的目标: 返回给定列表中所有正整数的扁平列表。 现在,我真的很喜欢这样做的一种方式,使用 cons 和递归,但他希望我使用
我是一名优秀的程序员,十分优秀!