功能列表

时间:2009-12-25 01:04:50

标签: functional-programming lisp scheme

有没有办法制作一个包含功能的列表?我要做的是,列出一些算术运算符(+ - * /),这样我就可以轻松地操纵它们的顺序并将它们应用到数字列表中。

所以,如果我有这个列表,我会像这样使用它:

(apply (map (lambda (x)
              x)
            '(+ - * /))
       '(1 2 3 4))

我是一名新手程序员,所以如果有更好的方法进行此类操作,我们非常感谢您的建议。

2 个答案:

答案 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版本更容易阅读。