Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#能被重构成无点风格吗?_F#_Pointfree - Fatal编程技术网

F#能被重构成无点风格吗?

F#能被重构成无点风格吗?,f#,pointfree,F#,Pointfree,在研究一个与编程相关的主题时,我在lambdabot中遇到了Haskell的重构工具,我想知道F#是否可以重构成无点风格 我并不提倡使用无点样式,而是将其视为更好地理解函数的一种方法 注:回答了这个问题的早期版本,但我重新编写了这个问题,因为这个答案对其他学习和使用F#的人很有价值,我不想因为一些接近票数的原因而删除这个问题 注意:仅仅因为我更改了问题,不要认为答案意味着不能使用F#以无点方式编码。在许多情况下都可以这样做,但你必须遵守一些限制。简短回答 没有 长答案 F#中有一些东西使得这种工

在研究一个与编程相关的主题时,我在lambdabot中遇到了Haskell的重构工具,我想知道F#是否可以重构成无点风格

我并不提倡使用无点样式,而是将其视为更好地理解函数的一种方法

注:回答了这个问题的早期版本,但我重新编写了这个问题,因为这个答案对其他学习和使用F#的人很有价值,我不想因为一些接近票数的原因而删除这个问题


注意:仅仅因为我更改了问题,不要认为答案意味着不能使用F#以无点方式编码。在许多情况下都可以这样做,但你必须遵守一些限制。

简短回答

没有

长答案

F#中有一些东西使得这种工具不切实际。(1) 由于.NET互操作,F#代码经常有副作用,当副作用出现时,自动代码转换变得非常困难。哈斯克尔并非如此;在Haskell中,等式推理要容易得多,你可以用右手边重写左手边,而不改变它们的计算。(2) F#中的无点编程受到以下限制:。我不确定您能否在不触及此问题的情况下积极地进行代码转换


我认为更实际的假设是F#代码是纯代码,在特定情况下不会出现值限制,这样我们可以给用户一些提示。用户可以在评估建议是否正确后离散地应用建议。它比你提到的更接近接近。在这个方向上添加了一些linting规则。

“要求我们推荐或查找工具、库或喜爱的非现场资源的问题对于堆栈溢出来说是离题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,请描述该问题以及迄今为止为解决该问题所做的工作。”感谢您提供有关为什么F#无法使用此类工具的详细信息。这是一个很好的事实,可以隐藏起来,以备将来需要。也许有一天我会制作这样一个工具,但要确定导致值限制的地方,这样每个人都可以从中学习。你可以确定语言的一个子集,它可以安全地应用无点重构。但是,如果没有一些特殊的标记,如
pure
关键字或
pure
属性,则很难确保您保持在安全区域内。