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-你错过了引用+
的部分,因此,在对它进行评估之前,它不是一个直接的过程。啊,是的,现在看看。谢谢你,尤瓦尔。