所以我的新方案。我試圖做一個定義使用形式的規範全局函數的函數((名稱:名稱)(參數:參數)(機身:機身)),所以例如計劃(漂亮的大):使用列表來定義參數
(fn-maker '((name: mult5) (x) (* x 5)))
將使其在全球如此我可以打電話給
(mult5 3)
,並得到15
這是我到目前爲止有:
(define (fn-maker fn-spec)
(let* (spec (map cdr fn-spec))
(name (caar spec))
(args (cadr fn-spec))
(body (caaddr (cdaddr fn-spec))))
(lambda (args)
body)))
m個目前我困惑的是如何讓lambda使用這些參數。按照現狀,lambda創建一個名爲「args」的新局部變量,而不是評估args後面的列表。有沒有解決的辦法?我目前的思考過程是,我應該在args提供的列表中使用某種形式的表達式,但是我不確定它會是什麼樣子,甚至不知道如何去構建它。
這是家庭作業,所以我絕對不是找代碼(作弊和所有的),而是在正確的方向和一些批評的一點。謝謝。
更新:爲了任何人誰在未來一旦出現這種情況,就可以做到這一點的代碼非常簡單地使用一些巧妙的引用。不需要宏。另外,事實證明,Pretty Big中的eval默認情況下會在全局中評估。
說明書是否提供了關於您或不允許使用哪些功能或特殊表格的規則?而且,製造商真的應該是一個功能,因爲你可以通過它來應用或映射? (如果後者是真的,我不知道如何在不使用eval的情況下做到這一點。) – pnkfelix 2013-02-12 01:20:26
另外,在這個其他問題上還有一些相關的討論:http://stackoverflow.com/questions/1894610/can -i-define-a-global-from-inside-a-procedure-in-scheme – pnkfelix 2013-02-12 01:39:48
對於規則,測試程序將打電話給形式(fn-maker fn-spec),然後是(無論 - 名稱是一些參數)。我們不允許使用set!和朋友或任何明確的循環功能(遞歸是好的)。 – JPatnode 2013-02-12 01:49:47