gpt4 book ai didi

sml - ML 编程语言 - Curry 函数

转载 作者:行者123 更新时间:2023-12-03 08:23:32 25 4
gpt4 key购买 nike

我需要找到一个具有以下签名的函数:

'a -> 'b -> ('a * 'b -> 'b) -> 'b

所以我尝试这样做:

fun f a b g = g(a,b)

得到结果:

val f = fn : 'a -> 'b -> ('a * 'b -> 'c) -> 'c

如何根据需要将此c设置为b

非常感谢。

最佳答案

问题是 g(a,b) 不限制结果类型。

您可以访问的 'b 类型的唯一值是第二个参数,因此您需要将其返回到某处,或者使用它以某种方式限制结果。

一个非常简单的解决方案是添加一个条件,

- fun f a b g = if false then b else g(a,b);
val f = fn : 'a -> 'b -> ('a * 'b -> 'b) -> 'b

附录,几周后,我突然想起了一个更优雅的解决方案,没有丑陋的条件。
由于 g 的结果应与其第二个参数具有相同的类型,因此您可以为其提供自己的结果。
这将强制 bg(a,b) 具有相同的类型:

- fun f a b g = g(a, g(a,b));
val f = fn : 'a -> 'b -> ('a * 'b -> 'b) -> 'b

关于sml - ML 编程语言 - Curry 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67146545/

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