Applying a symbol as a procedure

2020-04-15 03:05发布

Suppose I have a simple symbol:

> '+
+

Is there any way I can apply that symbol as a procedure:

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

So that '+ is evaluated to the procedure +?

标签: scheme
3条回答
我只想做你的唯一
2楼-- · 2020-04-15 03:11

Lucas's answer is great. For untrusted input you can make a white list of allowed symbols/operators.

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

((do-something `+) 1 2)
查看更多
3楼-- · 2020-04-15 03:13

Newbie too so hope I've understood your question correctly...

Functions are first class objects in scheme so you don't need eval:

1 ]=> (define plus +)

;Value: plus

1 ]=> (plus 2 3)

;Value: 5

HTH

Update: Ignore this and see the comments!

查看更多
闹够了就滚
4楼-- · 2020-04-15 03:29

I'm not 100% sure, but would:

((eval '+) 1 2)

work? I'm not sure if you need to specify the environment, or even if that works - I'm a Scheme noob. :)

查看更多
登录 后发表回答