2016-02-15 55 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

太感謝你了,這正是這個問題了。 –