如果您已经了解LISP,为什么还要学习F#?

时间:2008-09-24 12:22:04

标签: f# functional-programming lisp

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

11 个答案:

答案 0 :(得分:19)

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

学习F#用于实际使用的最大优点是它与.NET的集成。

答案 1 :(得分:6)

将Lisp直接与F#进行比较并不公平,因为在一天结束时有足够的时间你可以用任何一种语言编写相同的应用程序。

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

如果您想了解有关'为什么选择.NET'的更多信息,请查看此SO question

答案 2 :(得分:6)

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

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

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

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

答案 3 :(得分:5)

鉴于LISP是动态类型的,而F#是静态类型的,我发现这种比较很奇怪。

答案 4 :(得分:3)

如果我从Lisp切换到F#,那完全是因为我手上的任务非常受益于一些仅支持.NET的库。

但我没有,所以我不是。

答案 5 :(得分:3)

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

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

干杯, Jon Harrop。

答案 6 :(得分:3)

与大多数Lisp方言相比,F#是一种非常不同的语言。所以F#给你一个非常不同的编程角度 - 你不会从Lisp学到的角度。大多数Lisp方言最适合用于符号软件的增量交互式开发。同时,大多数Lisp方言不是函数式编程语言,而是更像多范式语言 - 不同的方言在支持FPL特征方面有不同的权重(没有副作用,不可变数据结构,代数数据类型......)。因此,大多数Lisp方言要么缺乏静态类型,要么不太注重它。

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

答案 7 :(得分:2)

F#具有以下优点:.NET开发(一般而言)被广泛采用,易于获取,并且更具有大众市场。

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

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

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

答案 8 :(得分:1)

我不确定你会不会?如果你发现F#有趣,那将是一个原因。如果你的工作需要它,那将是一个原因。如果您认为它会提高您的工作效率或为您提供超越当前知识的附加价值,那就是一个原因。

但是如果你没有发现F#有趣,你的工作并不需要它,而你认为​​它不会让你更有效率或带给你额外的价值,那么你为什么会这样做呢?

如果另一方面问题是F#给出的那个lisp没有的话,那么应该考虑类型推断,模式匹配以及与.NET框架其余部分的集成。

答案 9 :(得分:0)

我知道这个帖子已经老了但是因为我偶然发现了这个故事,我只想评论一下我的理由。我正在学习F#只是为了获得专业机会,因为.NET在一个主导我的领域的公司中占有很大的份量。功能范式在越来越多的定量和数据导向型公司中得到应用,我希望成为这一趋势的早期成员之一。目前还没有一种强大的功能语言可以完全安全地与.NET库集成。我实际上试图从Lisp代码中移植一些.NET,而且它真的很麻烦,因为FFI只支持C原语,而.NET互操作性需要一个接口'构建,即使我知道如何在C中做到这一点,这真的是一个巨大的痛苦。如果Lisp在它的下一个标准中加倍努力并且需要一个c ++类(包括虚拟函数w / vtables),并且在它的FFI中使用C#样式接口类型,那将是非常非常好的。甚至可能也会抛出Java接口样式类型。这将允许与.NET库完全互操作,并使Lisp成为大规模语言的有力竞争者。然而就是说,来自Lisp背景使得学习F#相当容易。而且我喜欢F#如何通过额外的努力提供通常会看到定量类型工作的类型。我相信F#是在考虑数学工作的情况下创建的,而且它本身对Lisp有价值。

答案 10 :(得分:0)

查看此问题(原始问题)的一种方法是将语言(以及相关工具和平台)与即时任务相匹配。如果任务需要绝大多数的.NET代码,并且在一种语言中需要较少的鞋子才能正面迎接任务,那么就采取阻力最小的路径(F#)。如果你不需要.NET功能,并且你很乐意使用LISP并且没有手臂弯曲可以远离它,那就继续使用它。

与将锤子与扳手进行比较没有太大区别。选择最有效的工具。试图选择一个客观的工具" best"是胡说八道。在任何情况下,在20年内,所有当前" hot"语言可能已经过时了。