Ant*_*kou 2 lisp scheme dynamic racket
对于这个可能很愚蠢的问题,我提前道歉:)
假设,我有一个字符串列表,如
(define func-names '("add" "sub" "mul"))
Run Code Online (Sandbox Code Playgroud)
还有像这样定义的函数
(define (add x y)
(+ x y))
(define (sub x y)
(- x y))
(define (mul x y)
(* x y))
Run Code Online (Sandbox Code Playgroud)
如您所见,列表中字符串的值对应于函数的名称。我需要一种方法来遍历列表并调用与字符串值对应的函数。就像是
(define (all-ops x y)
(map (lambda (name) (string->proc name x y)) func-names))
Run Code Online (Sandbox Code Playgroud)
string->proc我要找的东西在哪里。send/public_send如果您熟悉 Ruby,则类似于 Ruby 的方法。
我最感兴趣的是适用于 Racket 的答案。
谢谢你。
编辑; 而我忘了提,有可能是函数名的一百万,所以cond,match将繁琐的用在这里。
考虑制作一个将字符串映射到函数值的哈希表。
也就是说,您可以执行以下操作:
#lang racket
(define (add x y)
(+ x y))
(define ns (variable-reference->namespace (#%variable-reference)))
(define (string->procedure s)
(define sym (string->symbol s))
(eval sym ns))
(string->procedure "add")
((string->procedure "add") 1 2)
Run Code Online (Sandbox Code Playgroud)
另见http://blog.racket-lang.org/2011/10/on-eval-in-dynamic-languages-generally.html
| 归档时间: |
|
| 查看次数: |
2014 次 |
| 最近记录: |