gpt4 book ai didi

haskell - 为什么这种形式可以接受,但另一种形式会引发类型错误?

转载 作者:行者123 更新时间:2023-12-03 06:30:35 25 4
gpt4 key购买 nike

在使用现实世界的 Haskell 时,我尝试使用以下代码解决方案完成回文练习:

palin :: [a] -> [a]
palin list = list ++ rev list
where rev list
| null list = []
| otherwise = rev (tail list) ++ (head list)

这引发了“无法构造无限类型”错误。但是,只需用方括号替换头列表周围的括号,它就可以正常工作,如以下示例所示:

palin :: [a] -> [a]
palin list = list ++ rev list
where rev list
| null list = []
| otherwise = rev (tail list) ++ [head list]

我不太明白为什么它很重要,也不明白“无法​​构造无限类型 a = [a]”错误意味着什么。有人能解释一下吗?

最佳答案

在最后一行中,您尝试将非列表附加到列表中。 head list 给出列表的第一项,其类型为 a。当您尝试使用 ++ 追加时,您无法将不是列表的内容追加到列表中。通过附加 [head list],您可以将包含 1 个项目的列表附加到另一个列表。在本例中,[] 构造单个项目列表。

关于haskell - 为什么这种形式可以接受,但另一种形式会引发类型错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3326977/

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