Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell-类型/模式匹配_Haskell_Types_Pattern Matching - Fatal编程技术网

Haskell-类型/模式匹配

Haskell-类型/模式匹配,haskell,types,pattern-matching,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]

以下代码不编译。我得到一个类型错误。我认为这将是更好的版本,因为它清楚地区分了两种不同的情况。。。 该函数应该帮助确定有限状态机是否接受输入字

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
所以

正如您的空列表案例所需


事实上,在
[]
上进行模式匹配而不在
(x:xs)
上进行模式匹配,并使用
x
xs
——这就是我知道如何思考
foldl
是否会在这两种情况下为您提供正确答案的原因。不过,这种情况偶尔也会发生。

您刚才遇到了一个语法错误:

xs@[x:xs']
应该是

xs@(x:xs')
但实际上你不需要两个箱子,因为

foldl f b [] = b
所以

正如您的空列表案例所需


事实上,在
[]
上进行模式匹配而不在
(x:xs)
上进行模式匹配,并使用
x
xs
——这就是我知道如何思考
foldl
是否会在这两种情况下为您提供正确答案的原因。不过,它确实偶尔发生。

xs@(x:xs')
,而不是
xs@[x:xs']
。。谢谢^这解决了问题…
xs@(x:xs')
,而不是
xs@[x:xs']
。。谢谢^^这解决了问题。。。