我必須在Scheme中定義一個採用以下形式的可變參數函數:(define (n-loop procedure [a list of pairs (x,y)])
其中對的列表可以是任意長度。Scheme中的變量函數(使用嵌套映射)
每一對指定一個較低(包含)和一個上限(排除)。也就是說,下面的函數調用:(n-loop (lambda (x y) (inspect (list x y))) (0 2) (0 3))
生產:
(list x y) is (0 0)
(list x y) is (0 1)
(list x y) is (0 2)
(list x y) is (1 0)
(list x y) is (1 1)
(list x y) is (1 2)
現在,我已經就這個話題發表一個以前的時間,就被奇妙地幫助。但是,我已經有了新的指導方針來遵守。解決方案只能使用嵌套地圖找到。
我一直在探討的方法如下:找到第一組邊界所指定的所有值(在本例中爲(0 1 2)
)。這可以通過稱爲的函數完成。然後,我需要把這些數字中的每一個,並在下一組邊界(0 1 2 3)
中使用每個數字,從而產生((0 0) (0 1) (0 2) (0 3) (1 0)...)
。
我已經寫了這點如下:
(define (n-loop op . pairs)
(apply op (generate pairs))
)
(define (generate pairs)
(map (lambda (x) (cons x (generate (cdr pairs))))
(map (lambda (x) (enumerate (car x) (cadr x))) pairs))
)
但對於給定的數字,當我需要((0 0) (0 1) (0 2) (0 3) (1 0)...)
這個輸出(0 1 0 1 2 0 1 2 0 1 2)
。這是一個討厭的問題。有沒有人有任何見解?
對。我已經枚舉,積累和定義了平面圖。只是無法弄清楚如何將它們結合在一起。我會測試一下,謝謝。 – aquemini
如果它適合你,請不要忘記單擊左邊的複選標記以接受答案。 –
它還沒有工作,或者我會。我可能只是一個轉錄錯誤,但它會一直返回列表null。你測試過了嗎? – aquemini