gpt4 book ai didi

Haskell 守卫未被满足

转载 作者:行者123 更新时间:2023-12-02 14:22:52 25 4
gpt4 key购买 nike

test :: [String] -> [String]

test = foldr step []

where step x ys

| elem x ys = x : ys

| otherwise = ys

我正在尝试构建一个包含所有输入的不同字符串的新列表。我的测试数据是:

test ["one", "one", "two", "two", "three"]

预期结果:

["one", "two", "three"]

我是 Haskell 的新手,我确信我错过了一些非常基本和明显的东西,但已经没有办法探索它了。您能指出我的想法有哪些不足吗?

实际响应是[]。似乎第一个保护条件永远不会满足(如果我将其替换为 True,则会复制原始列表),因此永远不会构建输出列表。

我的理解是,折叠会累积列表中每个项目的步骤结果,并将其添加到空列表中。我预计该步骤将测试每个项目是否包含在输出列表中(测试的第一个元素不存在),并添加尚未包含在输出列表中的任何内容。显然不是:-)

最佳答案

您的推理是正确的:您只需切换 = x : ys= ys ,以便在 x 时添加 x em>不是 ys 的元素。另外,Data.List.nub 正是执行此操作。

关于Haskell 守卫未被满足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3664120/

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