當我學習方案和球拍時,我發現自己一次又一次地重複這種模式。在哪裏我有一個遞歸函數,其中一些函數的參數發生了變化,但有些參數卻沒有。我構建了一個外部函數,它接受所有參數,並在其中定義一個內部函數,該函數僅接受變化的參數並在其上重複。宏以簡化遞歸函數語法
舉一個具體的例子繼承人在「小策士」
;inserts an item to the right of an element in a list
(define (insert-to-right new old lat)
(define (insert-to-right lat)
(cond
[(null? lat) lat]
[(eq? old (car lat)) (cons old (cons new (cdr lat)))]
[else (cons (car lat) (insert-to-right (cdr lat)))]))
(insert-to-right lat))
上的功能鍛鍊有點基礎的情況下,是否有可能建立一個宏定義*和運營商(例如豎線)等我鍵入:
(define* (insert-to-right new old | lat)
(cond
[(null? lat) lat]
[(eq? old (car lat)) (cons old (cons new (cdr lat)))]
[else (cons (car lat) (insert-to-right (cdr lat)))]))
,然後這將擴大到第一形式被傳遞給外部函數的所有參數,但只有垂直條後的參數被傳遞給內迴路。
感謝Matthias。我想知道如何在沒有內部函數或命名let的情況下做到這一點。 – 2012-04-08 22:06:47