gpt4 book ai didi

f# - 通过类型分析的功能程序示例 'writing themselves'

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

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

6年前关闭。




Improve this question




(背景:我一直在考虑做一个关于 F# 和函数式编程的演讲。根据经验,我认为模式匹配和类型推断的“哇”因素不一定足以抵消“帮助!”因素是我的大括号和分号,我的代码会从边缘掉下来!”。这让我想到了真正令人惊叹的因素 - 对我来说 - 1)如果它编译,通常这意味着它可以工作,2)您通常可以从类型推断实现)

有一个video在 Channel9 上,Brian Beckman 和 Erik Meijer 提到了实现有时只是“脱离”了函数的类型签名。我过去也经历过这种情况,但无法提出一个足够简单的好例子来呈现给以前没有任何功能经验的人。

有没有人有好的例子可以分享? (它不必在 F# 中)

更新

如果有任何帮助,我认为我们需要换个角度思考这个问题:实际的谜题如下:

我有一些给定类型的数据,我想将其转换为不同的类型,并且 我有一套函数有给定的签名。

这是你必须拼凑起来的“乐高”。

最佳答案

从最简单的函数开始:identity :: 'a -> 'a .你能想到多少种实现方式?如果你给我一个 a ,我只能用它做一件事来给你回一个 a .我给你回同样的a你给我的,所以:

let id x = x

成对也一样。 fst :: ('a,'b) -> 'a .你有多少种实现方式?怎么样 snd :: ('a, 'b) -> 'b ?每个可能只存在一个实现。

类似地,从 fst 中取出列表的头部和尾部。和 snd .如 head :: 'a list -> atail :: 'a list -> 'a list , 和 'a list只是一对 ('a, 'a list) (或空列表),那么很明显,为了满足类型,分别返回列表的第一部分和第二部分。

另一个关于高阶函数的例子: compose :: ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b .只有一种实现,它不属于类型。你得到一个 c和两个功能。您可以用 c 做什么?嗯,你可以申请 (c -> a) .那么您可以用 a 做什么? ?你唯一能做的就是申请 (a -> b) ,瞧,您对类型感到满意。
let compose f g x = f (g x)

关于f# - 通过类型分析的功能程序示例 'writing themselves',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1720318/

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