方案功能列表 - 如何访问列表中的功能?

时间:2014-04-25 07:54:09

标签: scheme

在方案中,如何访问列表中的某个函数并将变量传递给该函数?

(define f 
        '((lambda (n) (+ n 2)) 
          (lambda (n) (* n 2)) 
          (lambda (n) (* n n))))

我已经定义了这个列表f,里面有3个不同的函数,我想知道我可以输入什么方案,以便能够将3传递给列表中的第二个函数?

我认为像((cadr f) 3)这样的东西会起作用,但我似乎无法弄明白,任何帮助都会受到赞赏我是Scheme的新手。

1 个答案:

答案 0 :(得分:4)

这里有的不是功能列表,而是符号列表列表。还包含一些符号...因为你引用了所有内容,所以所有内容都被引用,只有数字和列表,字符串是自引用的。如果要将对象保留在列表中,则有两种选择:

创建一个列表而不是引用它。

(define f 
        (list (lambda (n) (+ n 2)) 
              (lambda (n) (* n 2)) 
              (lambda (n) (* n n))))

伪引用它并取消引用每个函数声明

(define f 
        `(,(lambda (n) (+ n 2)) 
          ,(lambda (n) (* n 2)) 
          ,(lambda (n) (* n n))))

说实话,显式列表似乎比伪引号版本好一些。

你引用的版本给你的是:

(define f 
        (list (list 'lambda (list 'n) (list '+ 'n 2)) 
              (list 'lambda (list 'n) (list '* 'n 2)) 
              (list 'lambda (list 'n) (list '* 'n 'n))))

报价不是料品清单的简写。这是一种不评估任何东西的简写。