[英]Haskell - types/pattern matching
以下代碼無法編譯。 我收到類型錯誤。 我認為這將是更好的版本,因為它顯然將兩種不同的情況分開了……該功能應該有助於確定有限狀態機是否接受輸入單詞。
import Text.Show.Functions
import qualified Data.Set as Set
import qualified Data.List as List
setTransition :: (Int -> Char -> [Int]) -> [Int] -> Char -> [Int]
setTransition delta [] sigma = []
setTransition delta xs@[x:xs'] sigma = foldl f [] xs
where f ys q = (delta q sigma) `List.union` ys
但是,這(刪除了模式匹配)可以編譯。 有人可以告訴我為什么嗎?
import Text.Show.Functions
import qualified Data.Set as Set
import qualified Data.List as List
setTransition :: (Int -> Char -> [Int]) -> [Int] -> Char -> [Int]
setTransition delta [] sigma = []
setTransition delta xs sigma = foldl f [] xs
where f ys q = (delta q sigma) `List.union` ys
感謝幫助
您剛遇到語法錯誤:
xs@[x:xs']
應該
xs@(x:xs')
但是您實際上不需要兩種情況,因為
foldl f b [] = b
所以
foldl f [] [] = []
就像您的空清單案例所要求的一樣。
實際上,在[]
進行模式匹配而在(x:xs)
上不進行模式匹配並使用x
和xs
情況很少見,這就是我知道如何考慮foldl
在兩種情況下都能為您提供正確答案的情況。 不過,它確實偶爾發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.