gpt4 book ai didi

Haskell初学者订单函数

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

我的代码:

isOrdered :: (a -> a -> Bool) -> [a] -> Bool
isOrdered mark xs =(head xs) `mark`(head(tail xs))

编译完美,但是当我尝试使用它来调用它时

isOrdered < [1,2,3]

我收到错误:

Couldn't match expected type `(a0 -> a0 -> Bool) -> [a0] -> Bool'
with actual type `[t0]'
In the second argument of `(<)', namely `[1, 2, 3]'
In the expression: isOrdered < [1, 2, 3]
In an equation for `it': it = isOrdered < [1, 2, 3]

我在这里缺少什么?

最佳答案

<是中缀,你必须将它包裹在括号中。这会将其转换为前缀。

1 < 2 ==> (<) 1 2
1 + 5 ==> (+) 1 5

然后你的代码就变成了

isOrdered (<) [1, 2, 3]

这实际上是更一般的切片概念的一部分。您可以将中缀运算符完全转换为带有括号的前缀,或者像这样部分应用它

\x -> x + 1 ===> (+1)
\x -> 2 ^ x ===> (2^)

唯一有点像梨形的地方是 - 。自 -是 Haskell 语言定义的 super 特殊前缀运算符,你不能这样做 (-2) ,因为不清楚这是一个部分还是一个数字。 Haskell 选择一个数字,但如果你想要一个部分,有一个函数 subtract .

\x -> x - 2 ==> subtract 2

关于Haskell初学者订单函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20196439/

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