gpt4 book ai didi

lambda - F# 不带参数的 lambda 表达式

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

我是 F# 新手,我想使用不带参数的 lambda 表达式。这工作正常:

let a = fun () -> 2
a()

返回 2。

但现在我希望它返回 6:

let a = 3* (fun () -> 2)
a()

但是得到一个静态错误,该函数有太多参数或无法在此上下文中使用。

但这也有效:

let a = 3* (fun _ -> 2) 4
a

请注意,a 现在不能用作 a() 的函数

你能解释一下吗?

最佳答案

嗯,表达式 fun() -> 2 是一个函数。不是一个数字,不是一个字符串,也不是一个字节数组,而是一个函数。对函数唯一要做的就是调用它。或者,换句话说,执行它。 调用它。这就是您使用 a() 所做的事情。您向其传递一个参数 () (是的,连续两个括号在 F# 中是实际存在的,您可以将其作为参数传递),该函数将运行并返回结果。这是2。一个数字。

所以,再一次:首先你有一个函数。然后你执行它。执行的结果是一个数字。

现在,如果您想将一个函数乘以三...这是什么意思?这有点无稽之谈。您的意思是它的执行时间延长三倍吗?或者返回三个结果而不是一个?函数无法完成乘以数字的操作。

如果您想要另一个函数返回6而不是2,那么就这样说:

let a = fun() -> 2*3

或者,如果您想使用第一个函数并在其之上构建另一个函数,通过将第一个函数的结果相乘, - 那么您需要首先调用第二个函数(调用、执行)第一个函数,获取其结果,然后将其乘以三:

let a = fun() -> 2
let b = fun() -> a() * 3

至于最后一个例子 - 这有点棘手。

首先,表达式fun _ -> 2。这也是一个功能。它需要一个参数。它并不关心该参数是什么。它有点像“我会接受任何参数,无论你向我扔什么,我都不在乎,无论如何我都会返回你2”。所以你可以向它添加任何参数。例如,您可以向其抛出 4。需要4,这并不值得骄傲。 4 就可以了。这就是您通过 (fun _ -> 2) 4 所做的事情。这意味着“创建一个接受任意参数并返回 2 的函数,并使用参数 4 执行该函数”。

您可以用更长但更容易理解的方式表达相同的想法:

let a = fun _ -> 2
let b = a 4 // b = 2

然后,作为最后一步,您将使用参数 4 执行函数的结果,并将该结果乘以 3。你得到6。这是一个数字。而且不是一个函数。所以你不能再执行(调用、调用)它。因为,您知道,您无法执行一个数字。只是一个函数。

关于lambda - F# 不带参数的 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41966347/

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