在方案中,如何访问列表中的某个函数并将变量传递给该函数?
(define f
'((lambda (n) (+ n 2))
(lambda (n) (* n 2))
(lambda (n) (* n n))))
我已经定义了这个列表f,里面有3个不同的函数,我想知道我可以输入什么方案,以便能够将3传递给列表中的第二个函数?
我认为像((cadr f) 3)
这样的东西会起作用,但我似乎无法弄明白,任何帮助都会受到赞赏我是Scheme的新手。
答案 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))))
报价不是料品清单的简写。这是一种不评估任何东西的简写。