嗯,我無法弄清楚如何在haskell中做到這一點。例如,我有這樣的矩陣2dm矩陣中的鄰居表示爲列表清單
[[1,2],[3,4]]
,我想生成列表的與該矩陣的每個元素的所有可能的鄰居列表。
預期的結果是:
[[1,2],[1,3],[1,4],[2,1],[2,3],[2,4],[3,1],[3,2],[3,4],[4,1],[4,2],[4,3]]
我知道如何使功能,這將創造名單列表與每個小區的鄰居電線:
pos how = [ (0+dx,0+dy) | dx <- [0..(how-2)], dy <- [0..how-1] ] :: [(Int,Int)]
neighbour (x,y) how = [ (x+dx,y+dy) | dy <- [-1..1], dx <- [-1..1],
x+dx >= 0, y+dy >= 0, x+dx<=how-2, y+dy <= how-1,
(x,y)/=(x+dx,y+dy) ] :: [(Int,Int)]
all_n how = [ p | x <- pos how, let p = neighbour x how ] :: [[(Int,Int)]]
,但我不能將其更改爲像我描述的那樣工作。
現在確實很難弄清楚你在問什麼。你能更清楚一點嗎?例如,你如何定義一個「鄰居」?爲什麼'[1,4]'包含在預期結果列表中? –
如果細胞接觸其他角落甚至是她的鄰居 – whd
那麼爲什麼在您的預期結果列表中有[[1,4]]?它不是'[1,2]'或'[3,4]'的鄰居。 –