gpt4 book ai didi

F# 交互开发

转载 作者:行者123 更新时间:2023-12-05 01:01:18 24 4
gpt4 key购买 nike

来自 Matlab 和 R 背景,其中开发过程非常互动(选择、运行选择、修复、选择、运行选择、修复等),我试图弄清楚 F# 如何处理这种开发风格,这在科学应用中似乎非常重要。以下是 F# 新手会立即想到的几件事:

  1. 一次选择多行与一次选择一行的结果不同。

    let add x y = x + y
    add 4.1 2.3

    选择两行结果为 float -> float -> float 而选择第一行结果为 int -> int -> int。更一般地说,matlab/R 用户习惯于在每个语句之后而不是最后打印结果。

  2. 影子复制会变得很麻烦。

    let file = open2GBfile('file.txt')
    process file

    如果您一遍又一遍地以交互方式运行此程序,2GB 的文件将被影子复制,您将很快耗尽内存。使文件可变似乎不是合适的解决方案,因为程序的最终运行永远不会改变它。

鉴于这些问题,基于fsi.exe的系统不可能支持matlab/R风格的交互开发吗?

[编辑:我猜是 2. 对象被隐藏后是否会立即被标记为删除?]

最佳答案

我不希望 F# 成为 Matlab/R 的直接替代品,因为与它们不同,F# 是一种通用编程语言。并非特定类型工作所需的一切都在标准库中。但这并不意味着您描述的“交互式开发”是不可能的,它可能只需要预先付出一些努力来构建您所依赖的库函数。

对于 #1,如前所述,不幸的是在某些情况下添加类型注释是必要的,而且 inline 关键字和“hat-types”也可以 give you duck-typing .

对于 #2,我不清楚您的 openprocess 函数是做什么的,以及您希望它们做什么。例如,open 函数可以:

  • 一次读取整个文件,以数组/列表等形式返回数据,然后关闭文件
  • 返回一个 FileStream 对象,您正在对其调用 process 但忘记关闭。
  • 返回一个序列表达式,这样你就可以懒惰地遍历文件内容
  • Memoize以上之一的结果,以便后续调用仅返回缓存的结果
  • 创建文件访问抽象的无数其他方法之一。

其中一些比其他的更适合您的任务。与 Matlab & R 相比,像 F# 这样的通用语言为您提供了更多搬起石头砸自己脚的方法。但那是因为它为您提供了更多方式来做所有事情。

关于F# 交互开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1657753/

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