定義一個名為 mountain 的函式,該函式繪制一個高度為 n 且寬度為可以從東(右)攀登的山。將山從上到下每行加寬一個字符。山應該由“#”字符組成,山的不同級別由換行符分隔。山的盡頭不再有換行符。負高度的山應該等于高度 0,所以在這種情況下,結果應該是一個空串列。
你知道在其他情況下我能寫什么嗎?
mountain :: Int -> String
mountain a
| a < 1 = ""
| a == 1 = "#"
| a == 2 == "#\n##"
| otherwise = ???
uj5u.com熱心網友回復:
您可以使用累加器:一個包含#您需要寫入的字符數的變數,然后對這些專案進行遞回呼叫。
然后該mountain函式如下所示:
mountain :: Int -> String
mountain n = go 1
where go i
| i <= n = … go (i 1)
| otherwise = …
您需要填寫的…部分。
一種更優雅的方法可能是使用map我們創建串列 from 1to 的位置n,并且每次映射到該行的字串,然后使用unlines :: [String] -> String將這些字串連接在一起:
mountain :: Int -> String
mountain = unlines (map (…) [1 .. n])
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/490524.html
標籤:哈斯克尔
