簡體   English   中英

Haskell-類型/模式匹配

[英]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)上不進行模式匹配並使用xxs情況很少見,這就是我知道如何考慮foldl在兩種情況下都能為您提供正確答案的情況。 不過,它確實偶爾發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM