2016-02-15 57 views
0

我一直在计划(特别是很大)的这个程序工作,我碰到了一堵砖墙。我想要做的是创建一个可以创建其他过程或函数的过程。在大多数情况下,我认为我在正确的轨道上。方案功能制造商

(define (function-maker function-specs) 

    (let* [(specs (map cdr function-specs)) 
     (name (caar specs)) 
     (args (cadr function-specs)) 
     (body (cdr(cdr function-specs)))] 

    (eval(list 'define name 
      (list 'lambda args body))))) 

电流输出:

以上是电流输出,我会尽我所知发生了什么解释。输入本质上有三个参数。名称,命名该功能。函数的参数,最后是函数的主体。

然后将三个参数一起列出,然后创建一个新函数。上面的图片显示了我正在达到的错误。谢谢您的帮助!

回答

0

要看到发生了什么,摆脱eval和检查清单:

(define (function-maker function-specs) 

    (let* [(specs (map cdr function-specs)) 
     (name (caar specs)) 
     (args (cadr function-specs)) 
     (body (cdr(cdr function-specs)))] 

    (list 'define name 
      (list 'lambda args body)))) 

> (function-maker '((name: add5) (x) (+ x 5))) 
'(define add5 (lambda (x) ((+ x 5)))) 

正如你所看到的,也有在体内过多的括号,所以你试图使用所产生的数作为一个程序。

你想

(body (car (cdr (cdr function-specs)))) 

(body (caddr function-specs)) 
+0

太感谢你了,这正是这个问题了。 –