假设我有一个简单的符号:
> '+
+
我有什么方法可以将该符号应用为程序:
> ((do-something-with '+) 1 2)
3
以便'+
评估过程+
?
答案 0 :(得分:8)
我不是百分百肯定,但会:
((eval '+) 1 2)
工作?我不确定你是否需要指定环境,或者即使它有效 - 我是一个Scheme noob。 :)
答案 1 :(得分:3)
卢卡斯的回答很棒。对于不受信任的输入,您可以制作允许的符号/运算符的白名单。
(define do-something (lambda (op)
(cond
((equal? op `+) +)
((equal? op `-) -)
((equal? op `*) *)
((equal? op `/) /)
((equal? op `^) ^))))
((do-something `+) 1 2)
答案 2 :(得分:0)
新手也希望我能正确理解你的问题......
函数是scheme中的第一类对象,因此您不需要eval:
1 ]=> (define plus +)
;Value: plus
1 ]=> (plus 2 3)
;Value: 5
HTH
更新:忽略此内容并查看评论!