gpt4 book ai didi

Haskell 函数定义未按预期工作

转载 作者:行者123 更新时间:2023-12-02 18:47:33 25 4
gpt4 key购买 nike

我是函数式编程和 Haskell 的新手。正在努力学习它。不确定以下定义有什么问题:

test.h 中的函数定义

drop5 [a]  = drop 5 [a] 

尝试使用此功能时出现程序错误

$:load test.h
$drop5 [2,3,4,5,6,7,8]
Program error: pattern match failure: drop5 [2,3,4,5,6,7,8]
$:t drop5
drop5 :: [a] -> [a]

当我将定义更改为以下时,它就起作用了;这意味着它需要一个列表并删除列表的前 5 个元素

drop5 ns = drop 5 ns

在这种情况下,当我看到打印类型时:

$:t drop5
drop5 :: [a] -> [a]

我不确定为什么第一个定义与第二个定义不同?错误“程序错误:模式匹配失败意味着什么”?

最佳答案

在第一个定义中,[a] 是一种模式,仅匹配仅包含一个元素的列表,并且该元素在列表的右侧部分被称为 a规则。

因此,您将函数定义为仅接受单例列表。

此外,从只有一个元素的列表中删除 5 个元素显然会导致空列表(删除任何正数元素也是如此)。

关于Haskell 函数定义未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44913999/

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