Programming languages Lisp与F#有什么关系?学习Lisp对F#有帮助吗?

Programming languages Lisp与F#有什么关系?学习Lisp对F#有帮助吗?,programming-languages,f#,lisp,compare-contrast,Programming Languages,F#,Lisp,Compare Contrast,情况是这样的:我主要编写C#程序,并且在其中编写了类型,我不想丢失。同时我想学习函数式编程。当然,显而易见的答案是F 但除了C#之外,我还使用emacs作为编辑器,我真的很想学习Lisp。(学习你的编辑器/IDE语言你知道,这就是为什么我知道一点VB来编写我的VS宏的原因)这不仅仅是emacs,Lisp是我真正想学习的东西 至于F#,我可以将它与C#混合在一起,而不存在任何互操作问题,有一个很棒的GUI(WPF)和许多其他的.NET好东西。但它当然没有Lisp那么成熟 如果我是现实主义者,我知道

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

但除了C#之外,我还使用emacs作为编辑器,我真的很想学习Lisp。(学习你的编辑器/IDE语言你知道,这就是为什么我知道一点VB来编写我的VS宏的原因)这不仅仅是emacs,Lisp是我真正想学习的东西

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

如果我是现实主义者,我知道如果我想把函数式语言带入我的职业生涯,它必须是F#。由于学习两种完整的语言似乎有点多,我希望Lisp将是学习函数式编程的一种很好的方式,如果我以后开始学习F#,那将非常容易


这是真的吗?或者这两种语言根本不可比?

它们都是函数式语言,但在语法上却截然不同。这意味着许多概念将是相似的,而您(作为一个过程开发人员)将不得不做同样的脑力劳动来使用它们,但它们是非常不同的语言

F#是的派生词(其所有派生词都被视为不纯正的函数式语言),而F#更老,被视为“纯”函数式语言

函数式语言的纯粹性是一个引人入胜的话题,我建议您阅读以更好地理解这个概念:

许多人谈论“纯洁” 函数式语言,其中“纯” 似乎是“好”的同义词。 通常有两个特点 与…的定义有关 纯函数式语言:

  • 功能不能有副作用
  • 使用任何给定参数调用的函数将始终返回相同的值 价值观
  • F#与ML语言家族最具可比性,如SML和CAML。其语法和功能与Lisp不同

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


    而且,我会说,在开始F#之前学习一种更纯粹的函数式语言将是培养良好函数式编程习惯的一种方式,因为如果你不这样做,你的F#代码可能会变得更面向对象,功能性更低,因为你就是从这里来的。

    作为一种编程语言,Lisp本身非常特殊,但它与F#完全不同,只是它们都支持函数式编程。从Lisp到F#的语言结构并不多。如果你想学lisp,那就去学吧。函数式编程的思想将继承而不是语法。Lisp真的很老了,50多岁了。许多语言都受到了它的影响,还有不少方言

    如果你只是想在F#之前学习一门纯函数式语言,我建议你使用Haskell。
    Haskell受到ML的极大影响,是一个很好的过渡语言,因为F是一个ML的导数。你可以查看Haskell代码并在F代码中看到类似的模式。

    两个重要的事情要考虑的是:

    • LISP是动态类型,而F#是静态类型
    • LISP内置了宏。F#没有
    虽然它们都被认为是功能性的,并且有许多共同的特性,但它们也不同。学习LISP肯定会使您成为一名更好的F#程序员,反之亦然,但您仍然需要学习这两种语言的特点,才能在实际中使用它们


    为了能够与.NET进行互操作,我当然会选择F#但为了编程的美观,我也会尝试LISP。

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

  • 使用更纯粹的函数式语言 就像Lisp或Haskell那样 你需要打破一个程序 心态马上;或

  • 使用语用功能性语言 像F#一样,这也提供了更多 熟悉,但不太实用, 帮助您轻松进入it的结构

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


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

    我认为通过Common Lisp和F#所学的内容只有一小部分“重叠”。共同点是我粗略地想

    • 使用“cons list”作为常见的基本数据类型进行编程,有时编写递归(尤其是尾部递归)函数而不是循环
    • 常见高阶函数的一些基本用法(例如,“映射”-将函数应用于列表中的每个值)
    除了一些非常核心的函数式编程内容之外,我认为Common Lisp和F#之间的距离与两种主流“函数式”(非Haskell)语言之间的距离差不多。公共Lisp是动态的;F#是静态类型的。句法形式完全不同。运行时是完全不同的。图书馆是非常不同的。对象系统是完全不同的

    不管你学习它们的顺序是什么,我认为在学习了其中一个之后,在另一个方面仍然有很多东西需要学习(以我上面描述的小重叠部分为模)。

    Lisp是一个很大的函数