有没有办法制作一个包含功能的列表?我要做的是,列出一些算术运算符(+ - * /)
,这样我就可以轻松地操纵它们的顺序并将它们应用到数字列表中。
所以,如果我有这个列表,我会像这样使用它:
(apply (map (lambda (x)
x)
'(+ - * /))
'(1 2 3 4))
我是一名新手程序员,所以如果有更好的方法进行此类操作,我们非常感谢您的建议。
答案 0 :(得分:10)
列表使用LIST功能。
(list 1 2 3)
(list + - * /)
应用符号列表毫无意义:
(apply (map (lambda (x) x) '(+ - * /)) '(1 2 3 4))
将(应用一系列功能仍然没有意义):
(apply (map (lambda (x) x) (list + - * /)) '(1 2 3 4))
简化(仍然错误):
(apply (list + - * /) '(1 2 3 4))
但是,也许你想要这个:
(map (lambda (f)
(apply f '(1 2 3 4)))
(list + - * /))
在Common Lisp中:
(mapcar #'(lambda (f)
(apply f '(1 2 3 4)))
(list #'+ #'- #'* #'/))
返回:
(10 -8 24 1/24)
答案 1 :(得分:2)
我很惊讶没有人提到quasiquotation。 :-)在Scheme中,您可以说:
`(,+ ,- ,* ,/)
或Common Lisp:
`(,#'+ ,#'- ,#'* ,#'/)
在某些情况下,特别是涉及复杂列表,quasiquotation使代码比相应的list
版本更容易阅读。