2016-09-07 65 views
0

我正在學習如何使用球拍中的「匹配」功能,但我不確定它在某些情況下如何工作。球拍 - 匹配功能

例如,我遇到的一個問題是使用匹配來替換程序中每個出現的lambda「lumbda」。

> (lambda->lumbda '(lambda (lambda) lambda)) 
    (lumbda (lambda) lambda) 

它只應該將函數「lambda」更改爲「lumbda」,而不是任何變量。我不知道如何去做這件事。

+0

如果您發佈的嘗試性解決方案 –

+0

需要注意的是你的榜樣看起來可疑這將是有益的。由於它被引用,它將**從不**成爲一個程序,只是看起來像一個來源。 – Sylwester

回答

0

試試這個:

(define (lambda->lumbda exp) 
    (match exp 
    [(list 'lambda args body) (list 'lumbda args body)] 
    [_ (error "unknown expression")])) 

例如:

(lambda->lumbda '(lambda (lambda) lambda)) 
=> (lumbda (lambda) lambda) 
+0

不幸的是,是的。我想出了上述解決方案,但它被指定使用匹配。 –

+0

太棒了!它運作的很好,除非我只是試着運行 >(lambda-> lumbda'x) 它應該只返回x。我對比賽太不熟悉,沒有多少意義。 :/ –

+0

更改las行,而不是引發錯誤返回與參數 –