Scheme 将符号作为过程应用

Scheme 将符号作为过程应用,scheme,Scheme,假设我有一个简单的符号: > '+ + 是否有任何方法可以将该符号用作程序: > ((do-something-with '+) 1 2) 3 因此,'+被评估为过程+?我不是100%确定,但会: ((eval '+) 1 2) 工作?我不确定您是否需要指定环境,或者即使这样做是否有效-我是一个Scheme noob.:) 我也是新手,希望我正确理解了你的问题 函数是scheme中的第一类对象,因此不需要eval: 1 ]=> (define plus +) ;Valu

假设我有一个简单的符号:

> '+
+
是否有任何方法可以将该符号用作程序:

> ((do-something-with '+) 1 2)
3

因此,
'+
被评估为过程
+

我不是100%确定,但会:

((eval '+) 1 2)

工作?我不确定您是否需要指定环境,或者即使这样做是否有效-我是一个Scheme noob.:)

我也是新手,希望我正确理解了你的问题

函数是scheme中的第一类对象,因此不需要eval:

1 ]=> (define plus +)

;Value: plus

1 ]=> (plus 2 3)

;Value: 5


更新:忽略此项并查看评论

卢卡斯的回答很好。对于不受信任的输入,您可以创建允许的符号/运算符的白名单

(define do-something (lambda (op)
                       (cond
                         ((equal? op `+) +)
                         ((equal? op `-) -)
                         ((equal? op `*) *)
                         ((equal? op `/) /)
                         ((equal? op `^) ^))))

((do-something `+) 1 2)

很简单,不知道我是怎么错过的。Thx!:)如果你想让它与任何环境一起工作,你可能应该使用
(eval'+(null environment 5))
@Ben-你错过了引用
+
的部分,因此,在对它进行评估之前,它不是一个直接的过程。啊,是的,现在看看。谢谢你,尤瓦尔。