当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如果您已经了解LISP,为什么还要学习F#?》经验,为你挑选了4个好方法。

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



1> Nathan Shive..:

静态类型(带类型推断)

代数数据类型

模式匹配

可扩展模式与活动模式匹配.

Currying(语法很好)

称为"工作流"的Monadic编程提供了一种进行异步编程的好方法.

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

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



2> Chris Smith..:

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

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

如果您想了解更多关于'Why .NET'的信息,请查看此SO问题.



3> Andrey Fedor..:

如果你知道F#和Lisp,你会发现这是一个相当奇怪的问题.

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

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

您要问的是"如果我知道如何使用叉子,为什么我需要学习使用勺子?"


当然,但是表示<@ 1 + 2 @>的AST的数据的符号是什么.Eval()?在Lisp中,'(eval'(+ 1 2))是一个表达式,它计算字符串解析成的AST.AST是一个包含两个元素的列表 - 一个函数`eval'和一个包含三个元素的列表 - 一个函数`+'和两个参数`1'和`2'.这就是Lisp同性恋的意思.
F#中的引号和元编程提供与Lisp中的QUOTE和EVAL完全相同的功能.你的声明"F#没有这样的东西"是不正确的.您编写的Lisp代码'(+ 1 2)是引用的示例.因此,在编写时使用了引号.这可以在F#中等效地写为<@ 1 + 2 @>.
换句话说,我不知道你在谈论什么.我没有提到元编程(根据你的定义,JavaScript有).我也没有提到"引用",无论你的意思是什么.
那是不对的.F#有引文和完整的元编程.例如,F#代码<@ 1 + 2 @>.Eval()等效于Lisp代码(eval'(+ 1 2)).

4> sanxiyn..:

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

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有