我有一個輸入[ ( (Int,Int) , (Int,Int) ) ]是路徑末端的坐標。所有路徑都水平運行(兩端的 y 值相同)或垂直運行(兩端的 x 值相同)。所以我想寫一個函式,從輸入中生成路徑的所有坐標。
比如輸入的一對ends是[((0, 0), (0, 3)), ((0, 2), (2, 2))](這是兩條路徑),我需要的函式的輸出是[[(0, 0), (0, 1), (0, 2), (0, 3)], [(0, 2), (1, 2), (2, 2)]]
getPaths :: [ ( (Integer,Integer) , (Integer,Integer) ) ] -> [[(Integer,Integer)]]
getPaths [((xa, ya), (xb, yb))]
| xa == xb : [(xa, yb 1) | yb < ya]
| xa == xb : [(xa, ya 1) | ya < yb]
| ya == yb : [(xa 1, ya) | xa < xb]
| ya == yb : [(xb 1, ya) | xb < xa]
不知道對不對,有大神看看嗎?
uj5u.com熱心網友回復:
我認為最好先制作一個適用于一對坐標的函式:
path :: ((Int, Int), (Int, Int)) -> [(Int, Int)]
path = …
那么getPaths只是這個的映射:
getPaths :: [((Int, Int), (Int, Int))] -> [[(Int, Int)]]
getPaths = map path
至于path,您可以使用范圍,確實[x? .. x?]會產生x?和x?(包括兩者)之間的所有(整數)值。
因此,可以使用串列推導式建構式:
path :: ((Int, Int), (Int, Int)) -> [(Int, Int)]
path ((x?, y?), (x?, y?)) = [ … | … <- …, … <- … ]
您仍然需要填寫的…部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528482.html
標籤:哈斯克尔
上一篇:檢查輸入的前2個數字是否大于第三個數字,如果是,則列印true或false
下一篇:GHCI與編譯函式的區別
