2011-02-27 61 views
0

我正在寫一個名爲annotate的函數,它使用match-lambda,通常用遞歸調用來註釋。這裏是模式匹配中的一個:與匹配拉姆達匹配的方案模式

(`(lambda (,<param1> . ,<params>) ,<stmts>) 
     `(CLOSURE ENV (,<param1> . ,<params>) `(lambda (ENV) ,(map annotate ,(list-append `(,<param1> . ,<params>) `(,<stmts>)))))) 

list-append只是使兩個參數中出現新的列表。問題是,這種模式匹配器,當它返回是這樣的:從字面上

'(CLOSURE 
    ENV 
    (x) 
    `(lambda (ENV) 
    ,(map 
     annotate 
     (<results of list-append>)))) 

具體來說,「(地圖註解」版畫,而不是評估 - 即使它正在不帶引號的功能內的其他模式出現。使用完全相同的語法,沒有這個問題還有,不帶引號的功能列表 - 添加,沒有任何問題,執行

任何建議表示讚賞

回答

1

你嵌套了後引號:。你有一個在CLOSURE,然後前第二個在第二個lambda前面沒有英文逗號n:注意輸出中間的文字反引號。我認爲在第二個lambda將解決問題之前刪除反引號。

+0

我試過了,它抱怨說,「(list-append)」之前沒有引用準引號 – Schemer

+0

您需要刪除逗號;'map annotate'將位於quasiquote之外(因爲您想要運行它),所以你不需要在裏面引用東西 –

+0

啊,list-append並不需要被引用,謝謝 – Schemer