应用符号作为过程

时间:2009-11-21 12:32:49

标签: scheme

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

> '+
+

我有什么方法可以将该符号应用为程序:

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

以便'+评估过程+

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

更新:忽略此内容并查看评论!