私は画面に何かを描こうとしています。ハスケル:リストを受け取って何度か繰り返します
私の関数は、パラメータ(例えば[0,0,0,5,5,3,3,3,2,4,4,0])のintのリストを受け取り、私は反復する最大数([0,0,0,5,5,3,3,3,2,4,4,0])→5)から数回まで0
各繰り返しIリスト全体を調べ、String(連結する ""、 " - "、 "\ n")を生成します。 My機能がある
***
*** **
****** **
*********
*********
-------------
:
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
この最初の行は問題ありませんが、なぜ私のプログラムが停止するのかわかりません。確かに私は元のリスト(関数の3番目のパラメータ)を復元しようとしているときに何か間違っています。
3番目のパラメータは、元のリストを「保存」し、リスト全体を消費した後、「\ n」を連結し、元のリストを復元し、私は「何0
まで次の反復を継続すると仮定されます間違ってる?
ありがとうございます。
どのようにリストを処理するのですか?リストと最大numと出力の関係はどういう意味ですか? – Netwave
はい、私はあなたが何を意図しているかについても不明です。あなたは入力と希望の出力のいくつかの例を挙げることができますか? – luqui
'length(h:hs)== 0'は決して真ではなく、'(h:hs)/ = [] 'は常に真であることに注意してください。 'length(h:hs)> 0'と同じです。 – ErikR