在方案中,如何访问列表内的某个函数并将变量传递给该函数?
(define f
'((lambda (n) (+ n 2))
(lambda (n) (* n 2))
(lambda (n) (* n n))))
我已经定义了该列表f,其中具有3个不同的函数,我想知道我可以输入哪种格式,以便能够将3传递给列表中的第二个函数?
我以为这样的((cadr f) 3)
方法行得通,但我似乎无法弄清楚,我对Scheme真的很陌生,如果能提供任何帮助,我们将不胜感激。
您所拥有的不是功能列表,而是符号列表。还包含一些符号...由于您引用了所有内容,因此所有内容都被引用了,只有数字和列表,字符串都被自我引用了。如果要将对象保留在列表中,则有两种选择:
创建一个列表而不是引用它。
(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))))
报价不是商品清单的简写。这是不进行任何评估的捷径。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句