开发者

Applying a symbol as a procedure

开发者 https://www.devze.com 2022-12-11 22:20 出处:网络
Suppose I have a simple symbol: > \'+ + Is there any way I can apply that symbol as a procedure: > ((do-something-with \'+) 1 2)

Suppose I have a simple symbol:

> '+
+

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

> ((do-something-with '+) 1 2)
开发者_C百科3

So that '+ is evaluated to the procedure +?


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. :)


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)


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!

0

精彩评论

暂无评论...
验证码 换一张
取 消