gpt4 book ai didi

haskell - Haskell 中的以下 lambda 函数实际返回什么?

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

考虑 Haskell 中的以下 lambda 函数:

(\x g n -> g (x * n))

它需要两个参数:a Num命名x和一个函数g这需要 Num命名n并返回其他东西。 lambda 函数返回与 g 类型相同的另一个函数。 :

(\x g n -> g (x * n)) :: Num a => a -> (a -> t) -> a -> t

我不明白的是表达式 g (x * n) 是什么意思?实际上代表。例如,考虑以下用例:

((\x g n -> g (x * n)) 2 id)

在本例中x2gid 。然而n是什么? ? g (x * n) 是什么意思?代表?通过简单的替换,它可以减少为 id (2 * n) 。这和id . (2 *)一样吗?如果是这样那为什么不简单地写 (\x g -> g . (x *))

最佳答案

我要反驳chirlu。 (\x g n -> g (x * n)) 是一个只有一个参数的函数。

因为所有函数都只接受一个参数。只是该函数返回另一个函数,该函数返回另一个函数。

脱糖后,效果一样

\x -> \g -> \n -> g (x * n)

这非常接近它的类型

Num a => a -> (a -> b) -> a -> b

扩展您的用例:

(\x g n -> g (x * n)) 2 id

让我们扩展一下

(\x -> \g -> \n -> g (x * n)) 2 id

与以下内容相同

((\x -> \g -> \n -> g (x * n)) 2) id

现在我们可以将内部函数应用于其参数来获取

(let x = 2 in \g -> \n -> g (x * n)) id

(\g -> \n -> g (2 * n)) id

现在我们可以将此函数应用于其参数来获取

let g = id in \n -> g (2 * n)

\n -> id (2 * n)

通过检查,我们可以说它相当于

\n -> 2 * n

或者,无积分

(2*)

关于haskell - Haskell 中的以下 lambda 函数实际返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791481/

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