Lisp如何与F#相关,并且正在学习Lisp是一个有用的F#?

Pet*_*ter 14 lisp f# programming-languages compare-contrast

情况就是这样:我主要编写C#并编写了类型,我不想丢失.同时我想学习函数式编程.显而易见的答案当然是F#.

但对于除C#以外的所有内容,我使用emacs作为编辑器,我也非常想学习Lisp.(了解你所知道的编辑器/ IDE的语言,这就是为什么我知道用VB编写我的VS-macro的原因)而且它不仅仅是emacs,Lisp是我真正想要学习的东西.

至于F#,我可以将它与C#混合而没有任何互操作问题,有一个很棒的GUI(WPF)和许多其他.NET好东西.但它当然不像Lisp那样成熟.

如果我是现实的,我知道如果我想将功能性语言走私到我的职业生涯中,它必须是F#.由于学习两种语言似乎有点多,我希望Lisp是学习函数式编程的好方法,如果我以后开始使用F#,那将非常容易....

这是真的?或者这两种语言完全没有可比性?

Rai*_*wig 15

Lisp是一个庞大的语言和实现系列.例如,Scheme是一种Lisp方言,可能有超过一百种实现(其中大约十种略显受欢迎).Common Lisp是另一种方言,目前维护的实现大约有十种.Scheme和Common Lisp都有实现试图实现的书面标准.

F#既是语言又是实现.来自微软.它主要来自OCAML,属于ML语言家族.

Lisp是一种支持函数式编程的早期语言(60年代的Lisp 1.5).很多早期的函数式编程实验都是在Lisp中完成的.在Lisp社区的70年代,有一个功能编程根源的运动,结果是Scheme.然后特别是在上世纪80年代和90年代出现了新的函数式语言(ML,Miranda,FP,SML,Haskell,Clean,......),它们与通常的Lisp方言完全不同.仍然有一些遗产,但大多数是在不同的方向发展(静态类型,类型推断,模块系统,批处理语言,代数数据类型,惰性评估,纯度等).Scheme社区仍然与FP社区有很多联系.但这主要是它.

有一些基本的FP思想可以独立于特定的FP语言学习,但通常F#与大多数Lisp方言非常不同.F#支持.net生态系统的另一个特性(特别是因为它是微软的创建)并不是Lisp方言所支持的.

我也不会期望知道像Emacs Lisp这样有限的Lisp方言来学习F#.

  • 为什么Lisp的过去时态? (2认同)

Bri*_*ian 10

我认为通过Common Lisp和F#学习的内容只有很小的"重叠".我认为通用性是粗略的

  • 使用'cons-lists'作为通用基础数据类型进行编程,有时编写递归(尤其是尾递归)函数而不是循环
  • 常见高阶函数的一些基本用法(例如'map' - 将函数应用于列表中的每个值)

除了一些非常核心的函数式编程之外,我认为Common Lisp和F#的区别在于两种主流的"功能"(非Haskell)语言.Common Lisp是动态的; F#是静态类型的.句法形式完全不同.运行时完全不同.图书馆非常不同.对象系统完全不同.

无论你学习它们的顺序如何,我认为在学习之后,在另一个学习中仍然需要学习更多的东西(模数我上面描述的小重叠).


Dre*_*ins 5

F#与ML系列语言最相似,例如SML和CAML.语法和功能与Lisp不同.

但我认为从计算机科学的角度来看,学习至少一种功能语言非常重要.能够这样思考是好的.

并且,我想说,在启动F#之前学习一种更纯粹的函数式语言将是一种获得良好的函数编程习惯的方法,因为如果你不这样做,你的F#代码最终可能会更多OO而且功能更少,因为那就是你来自哪里.

  • F#不仅与ML相当 - 它是它的衍生物. (6认同)

dah*_*byk 5

在我看来,学习函数式编程有两种方法:

  1. 使用更纯粹的函数式语言,如 Lisp 或 Haskell,这将迫使你立即摆脱程序思维;或者

  2. 使用实用的函数式语言(如 F#),该语言还提供更熟悉但功能更少的结构,以帮助您轻松进入它。

在任何一种情况下,如果你能用语言做一些有用的事情,你就会从学习经验中获得更多。听起来您对 Lisp (Emacs) 和 F# (.NET interop) 有动力,所以我会看看两者,看看是什么吸引了您的注意力。

最终,理解函数式编程概念(高阶函数、无副作用、尾递归等)比任何一种语言都更有价值。一旦你学习了这些概念,学习新语言并将这些技术应用到其他语言(比如功能越来越强大的 C#)就会容易得多。按照这些思路,您可能对现实世界的函数式编程感兴趣。