7

当您已经熟悉 LISP 时,学习 F# 的附加值是什么?

4

11 回答 11

19

其中很多是编程语言世界中相对较新的发展。这是您将在 F# 中看到而在 Lisp 中不会看到的东西,尤其是 Common Lisp,因为 F# 标准仍在开发中。结果,你会发现有很多东西要学。当然,像 ADT、模式匹配、monad 和柯里化这样的东西可以在 Lisp 中构建为一个库,但是学习如何在方便内置的语言中使用它们会更好。

学习 F# 以供实际使用的最大优势在于它与 .NET 的集成。

于 2008-09-24T19:41:23.130 回答
6

将 Lisp 直接与 F# 进行比较并不公平,因为最终只要有足够的时间,您就可以用任何一种语言编写相同的应用程序。

但是,您应该学习 F#,原因与 C# 或 Java 开发人员应该学习它的原因相同——因为它允许在 .NET 平台上进行函数式编程。我对 Lisp 不是 100% 熟悉,但我认为它与 OCaml 有一些相同的问题,因为没有一流的库支持。你如何在 Lisp 中进行数据库访问?那么高性能显卡呢?

如果您想了解有关“为什么使用 .NET”的更多信息,请查看这个SO 问题

于 2008-09-24T16:45:55.267 回答
6

如果您了解 F# 和 Lisp,您会发现这是一个相当奇怪的问题。

正如其他人指出的那样,Lisp 是动态类型的。更重要的是,Lisp 的独特之处在于它是谐音的:Lisp 代码是一种基本的 Lisp 数据类型(列表)。宏系统通过让您编写在编译时执行并修改其他代码的代码来利用这一点。

F# 没有这样的东西 - 它是一种静态类型语言,它借鉴了 ML 和 Haskell 的许多想法,并在 .NET 上运行

你的问题类似于“如果我知道如何使用叉子,为什么我需要学习使用勺子?”

于 2009-02-25T21:28:37.860 回答
5

鉴于 LISP 是动态类型的,而 F# 是静态类型的,我觉得这样的比较很奇怪。

于 2008-09-24T12:28:35.417 回答
3

如果我从 Lisp 切换到 F#,那完全是因为我手头有一项任务,该任务极大地受益于一些仅限 .NET 的库。

但我没有,所以我不是。

于 2008-09-24T12:29:19.627 回答
3

钱。F# 代码已经比 Lisp 代码更有价值,并且随着 F# 的广泛采用,这种差距将迅速扩大。

换句话说,与使用 Lisp 相比,使用 F# 获得稳定收入的机会要大得多。

干杯,乔恩·哈罗普。

于 2008-10-19T04:17:40.513 回答
3

与大多数 Lisp 方言相比,F# 是一种非常不同的语言。所以 F# 为您提供了一个非常不同的编程角度——一个您不会从 Lisp 中学到的角度。大多数 Lisp 方言最适合用于符号软件的增量式交互式开发。同时,大多数 Lisp 方言不是函数式编程语言,而更像是多范式语言——不同的方言对支持 FPL 功能的重视程度不同(无副作用、不可变数据结构、代数数据类型……)。因此,大多数 Lisp 方言要么缺乏静态类型,要么不太重视它。

所以,如果你知道一些 Lisp 方言,那么学习 F# 会很有意义。只是不要认为你的 Lisp 知识大部分适用于 F#,因为 F# 是一种非常不同的语言。就像使用 C 或 Java 的命令式编程在学习 Lisp 时需要忘记一些想法一样,在使用 F# 时也需要忘记 Lisp 习惯(无类型、副作用、宏......)。F# 也由 Microsoft 驱动并利用 .net 框架。

于 2009-02-25T21:19:53.183 回答
2

F# 的好处是 .NET 开发(通常)被非常广泛地采用、易于获得并且更大众市场。

如果您想编写 F# 代码,您可以获得 Visual Studio,许多开发人员已经拥有它……而不是让 LISP 环境启动并运行。

此外,现有的 .NET 开发人员更倾向于关注 F# 而不是 LISP,如果这对您来说意味着什么的话。

(这来自一位 .NET 开发人员,他在大学期间编写并喜爱 LISP)。

于 2009-02-25T21:34:03.010 回答
1

我不确定你会不会?如果您觉得 F# 有趣,那将是一个原因。如果您的工作需要它,那将是一个原因。如果您认为它会使您更有效率或为您当前的知识带来附加值,那将是一个原因。

但是,如果您不觉得 F# 有趣,您的工作不需要它,并且您认为它不会提高您的工作效率或为您带来附加值,那么您为什么会这样做呢?

另一方面,如果问题是 F# 为 lisp 提供了什么,那么应该考虑类型推断、模式匹配以及与 .NET 框架的其余部分的集成。

于 2008-09-24T19:56:08.960 回答
0

我知道这个帖子很旧,但自从我偶然发现这个帖子后,我只想评论一下我的原因。我学习 F# 只是为了获得专业机会,因为 .NET 在主导我所在领域的一类公司中占有重要地位。功能范式在更多以定量和数据为导向的公司中的使用越来越多,我想成为这一趋势的先行者之一。目前不存在与 .NET 库完全安全集成的强大功能语言。我实际上试图从 Lisp 代码中移植一些 .NET,这真的很痛苦,因为 FFI 只支持 C 原语,而 .NET 互操作性需要一个“接口”结构,即使我知道如何在 C 中做到这一点,它确实是一个巨大的痛。这将是真的,真的,如果 Lisp 在它的下一个标准中加倍努力,并且需要一个 c++ 类(包括带有 vtables 的虚函数),以及它的 FFI 中的 C# 样式接口类型,那就太好了。甚至还可以引入 Java 接口样式类型。这将实现与 .NET 库的完全互操作性,并使 Lisp 作为一种大规模语言成为强有力的竞争者。然而话虽如此,来自 Lisp 背景使得学习 F# 变得相当容易。而且我喜欢 F# 如何付出额外的努力来提供您通常会看到的定量类型工作的类型。我相信 F# 是在考虑数学工作的情况下创建的,并且它本身比 Lisp 更有价值。这将实现与 .NET 库的完全互操作性,并使 Lisp 作为一种大规模语言成为强有力的竞争者。然而话虽如此,来自 Lisp 背景使得学习 F# 变得相当容易。而且我喜欢 F# 如何付出额外的努力来提供您通常会看到的定量类型工作的类型。我相信 F# 是在考虑数学工作的情况下创建的,并且它本身比 Lisp 更有价值。这将实现与 .NET 库的完全互操作性,并使 Lisp 作为一种大规模语言成为强有力的竞争者。然而话虽如此,来自 Lisp 背景使得学习 F# 变得相当容易。而且我喜欢 F# 如何付出额外的努力来提供您通常会看到的定量类型工作的类型。我相信 F# 是在考虑数学工作的情况下创建的,并且它本身比 Lisp 更有价值。

于 2012-01-12T20:17:55.197 回答
0

看待这个(原始问题)的一种方法是将语言(以及相关的工具和平台)与直接任务相匹配。如果该任务需要绝大多数 .NET 代码,并且在一种语言中比另一种语言需要更少的鞋拔来完成任务,那么选择阻力最小的路径 (F#)。如果您不需要 .NET 功能,并且您对使用 LISP 感到很自在,并且无需弯腰摆脱它,请继续使用它。

与比较锤子和扳手并没有太大区别。选择最适合工作的工具。试图选择一个客观上“最好”的工具是无稽之谈。无论如何,在 20 年内,所有当前“热门”的语言都可能已经过时了。

于 2015-03-16T02:22:11.867 回答