我有一個關於遞歸函數繪製圖像的問題帶摺疊功能和附加功能?
是的,這是一個家庭作業,但我不知道如何繪製該圖像。我至今是:
- ,給我點(X/Y)的列表,從曲線的函數(
(list (x1/y2) (x2/y2)...(xn/yn)
) - 要獲得例如x座標我必須寫
point-x (first lis)
- 函數我叫
(zipWith f xs ys)
接受兩個列表(xs ys)
應用功能f
,使一個列表(例如(zipWith + (list 1 2 3) (list 10 20 30)) -> (list 11 22 33)
) - 函數
make-tuple
取兩個列表和使它們的元組(例如:
(make-tuple (list 1 2 3) (list 4 5 6)) -> (tuple (list 1 2 3) (list 4 5 6))
爲了得到第一個元組我必須寫(xs1 (tuple (list 1 2 3) (list 4 5 6)) -> (list 1 2 3)
我們實際的功能:
我們不得不使用它繪製一條線從一點到另一點的功能add-line
。
參數是image number number number number string
換句話說:empty-image x1 y1 x2 y2 "black"
因此,它與empty-image
開始,並吸引了來自(x1/y1)
到(x2/y2)
線與色"black"
而且我們必須使用fold
寫的功能。所以,我對這樣的嘗試:
;Signature
(: render ((list-of point) -> image))
(define render
(lambda (xs)
(let((tuple-list (zipWith make-tuple xs (rest xs))))
(fold empty-image
add-line
tuple-list))))
我試圖做的是採取點的名單,並列出與點
(list (tuple (x1/y1) (x2/y2)) (tuple (x2/y2) (x3/y3))...(tuple (xn/yn) (xn/yn)))
現在我想用fold
申請add-line
於元組列表的元組。所以我說,讓我們拿第一個元組(我的兩個點)並將它們應用到函數add-line
。然後取下一個元組,並將這些點應用於add-line
函數(依此類推),直到列表爲空。
現在的問題是,Scheme說add-line
需要6個參數,但只能找到2個。我知道我的問題,因爲add-line
不知道從哪裏得到其他參數。所以,我想:
(define render
(lambda (xs)
(let((tuple-list (zipWith make-tuple xs (rest xs))))
(fold empty-image (add-line
empty-image
(point-x (xs1 (first tuple-list)))
(point-y (xs1 (first tuple-list)))
(point-x (xs2 (first tuple-list)))
(point-y (xs2 (first tuple-list)))
"black")
tuple-list))))
,並知道它說:「函數調用:預計開括號後的函數,但是接收的圖像」
我又知道我的錯誤,add-line
畫一條線,並摺疊嘗試將該圖像應用於列表,但需要一個函數而不是圖像。所以我的問題:
我如何寫一個遞歸函數render
與add-line
和fold
,繪製的第一線,然後得到下一個點,並繪製下一行與第一個組合?
(如遞歸add-line
功能,即畫線後,再次調用自身)