gpt4 book ai didi

haskell - 模式匹配的严格性与解构性

转载 作者:行者123 更新时间:2023-12-02 21:23:53 26 4
gpt4 key购买 nike

我正在尝试根据 foldr 定义原始递归,如 A tutorial on the universality and expressiveness on fold 中所述。第 4.1 章。

这是第一次尝试

simpleRecursive f v xs = fst $ foldr g (v,[]) xs
where
g x (acc, xs) = (f x xs acc,x:xs)

但是,上述定义不会因 head $ simpleRecursive (\x xs acc -> x:xs) [] [1..]

而停止

下面是停止的定义

simpleRecursive f v xs = fst $ foldr g (v,[]) xs
where
g x r = let (acc,xs) = r
in (f x xs acc,x:xs)

鉴于几乎相似的定义但不同的结果,为什么会有所不同?这与 Haskell 模式匹配的方式有关吗?

最佳答案

这两个函数之间的关键区别在于

g x r = let (acc, xs) = r
in (f x xs acc, x:xs)

元组构造函数上的模式匹配是无可辩驳的,而在

g x (acc, xs) = (f x xs acc, x:xs)

事实并非如此。换句话说,g 的第一个定义相当于

g x ~(acc, xs) = (f x xs acc, x:xs)

关于haskell - 模式匹配的严格性与解构性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39159825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com