Applying a symbol as a procedure

后端 未结 3 998
囚心锁ツ
囚心锁ツ 2021-01-21 19:32

Suppose I have a simple symbol:

> \'+
+

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

> ((do-something-with \'         


        
相关标签:
3条回答
  • 2021-01-21 19:52

    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 讨论(0)
  • 2021-01-21 19:56

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

    0 讨论(0)
  • 2021-01-21 19:58

    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)
    
    0 讨论(0)
提交回复
热议问题