将列表转换为函数

时间:2014-04-06 20:15:24

标签: scheme racket

我有一个小小的菜鸟问题。我必须在方案中做基因编程的功课,第一步是完成一些给定的功能。

我必须执行一个随机生成的函数,其中包含一个范围内的所有可能参数(使用map)。 “功能”是类似'(* (+ 1 x) (- x (* 2 3)))的列表。

如何使用给定参数执行它? (例如x = 2)。顺便说一下,生成的函数最多有1个参数(它是x或无)。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是我的解决方案:

(define (execute expr)
  (lambda (x)
    (let recur ((expr expr))
      (case expr
        ((x) x)
        ((+) +)
        ((-) -)
        ((*) *)
        ((/) /)
        (else
         (if (list? expr)
             (apply (recur (car expr)) (map recur (cdr expr)))
             expr))))))

使用示例:

> (define foo (execute '(* (+ 1 x) (- x (* 2 3)))))
> (foo 42)
=> 1548