I keep getting this error error: Parse error in pattern: x
I am trying to write a function that tells me whether a given position is valid or not. Where x
is ['a'..'h']
and y
is [1..8]
.
其他的答案已經討論了什麼是錯誤的:你使用的後衛在沒有界限的條款中x
:
isValid Position(_ y) = y
,此外您使用引號來代替與elem
功能反引號:
x 'elem' ['a'..'h']
所以嚴格的修復將是:
isValid :: Position -> Bool
isValid (Position x y)
| x `elem` ['a'..'h'] && y `elem` [1..8] = True
| otherwise = False
因爲我們實際上會返回後衛的結果,我們不需要使用警衛並且可以將警衛折成一個表情:
isValid :: Position -> Bool
isValid (Position x y) = x `elem` ['a'..'h'] && y `elem` [1..8]
儘管如此,sinc Ë我們這裏範圍和第二範圍內工作是整數,我們沒有在一系列使用elem
,我們可以使用:
isValid :: Position -> Bool
isValid (Position x y) = 'a' <= x && x <= 'h' && 1 <= y && y <= 8
對於很小的範圍內,有可能不會是太大的影響但elem
工作在O(n)最壞的情況,而兩個邊界檢查工作在O(1)。
「位置」類型的定義是什麼? – dfeuer