我試圖在屏幕上繪製一些東西。Haskell:接收一個列表並迭代幾次
我的函數接收一個int參數列表(例如[0,0,0,5,5,5,3,3,3,2,4,4,0]),我必須迭代從最大數([0,0,0,5,5,5,3,3,3,2,4,4,0]) - > 5)直到0的幾次,直到0
在每次迭代I檢查整個列表,並生成一個字符串(連接「」,「 - 」和「\ n」)。編寫結果是假設是這樣的:
***
*** **
****** **
*********
*********
-------------
我的功能是:
generateSTR (x:xs) = daux (x:xs) (maximum (x:xs)) (x:xs) ""
where daux (h:hs) mh (y:ys) strdib
| mh /= 0 && length(h:hs) == 0 = daux (y:ys) (mh-1) (y:ys) "\n" ++ strdib
| mh > h && mh > 0 && (h:hs) /= [] = daux hs mh (y:ys) "" ++ strdib
| mh <= h && mh > 0 && (h:hs) /= [] = daux hs mh (y:ys) "*" ++ strdib
| mh == 0 && length(h:hs) > 0 = daux hs mh hs "-" ++ strdib
daux [] 0 [] strdib = strdib
daux [] _ _ strdib = strdib
的問題是,我只得到了第一線的平局(b是空白「 「)。
bbb***bbbbbbb
第一行是確定的,但我不知道爲什麼我的程序停止。當我試圖恢復原始列表(函數中的第三個參數)時,肯定我做錯了什麼。
第三個參數是想「拯救」的原始列表和消耗整個列表之後,連接一個「\ n」,並恢復原來的列表,下一次迭代繼續下去,直到0
我」什麼米做錯了嗎?
預先感謝您。
它不清楚(至少對我來說)你如何處理列表,我的意思是什麼關係列表,最大數量和輸出? – Netwave
是的,我也不清楚你的意圖。你能舉幾個輸入和期望輸出的例子嗎? – luqui
注意'length(h:hs)== 0'永遠不會是真的,並且'(h:hs)/ = []'總是爲真。 「長度(h:hs)> 0」相同。 – ErikR