这个是这种情况:我主要方案C#和有写入类型在这我不想失去。在同一时间,我想学功能的程序。显而易见的答案当然是F#。

但对于一切除了C#我使用emacs作为一个编辑,我真的想要了解口齿不清了。(了解你的编辑/IDE的语言,你知道,这就是为什么我知道有点VB写我VS-宏观的),它不仅仅是软件是口齿不清的东西我真的很想学习。

作为对,我可以交流它与C#没有任何互操作问题,有一个很大的GUI(WPF)和很多其他。净的东西。但是,当然,不成熟,因为口齿不清。

如果我是真实的我知道如果我想要走私一个功能性的语言为我的职业生活必须F#。由于学习两个整体的语言似乎有点多了,我希望这些将是一个伟大的学习方式编程功能,并且如果我开始F#以后,它会很容易。

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

有帮助吗?

解决方案

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

F#既是语言又是实现。来自Microsoft。它主要来自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#。

其他提示

我想只有一个小的'重叠'为什么你会学会通过的共同些与F#。该共同点是我认为约

  • 编程与'cons-名单'作为共同的基本数据类型,有时候写字递归的(尤其是尾巴-recursive)的功能,而不是循环
  • 一些基本采用的共同的高级功能(例如:"地图"-适用一个功能中的每个值的列表)

除了一些非常核心的功能程序的东西,我认为,共同的口齿不清和F#是一样远的彼此作为两个主流"功能性"(非Haskell)语言即可。共同些是动态;F#是静态型.语法形式是完全不同的。的运行时完全不同。图书馆有很大的不同。对象系统是完全不同的。

无论哪了你学他们,我认为以后的学习的一个仍然会有相当多的了解,在其他(模小的重叠我上所述)。

F#与ML系列语言最具可比性,例如SML和CAML。语法和功能与Lisp不同。

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

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

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

  1. 使用更纯粹的功能语言 像Lisp或Haskell一样会强迫 你打破了程序 心态;或

  2. 使用实用的功能语言 像F#也提供更多 熟悉,但功能较差, 构造可以帮助您轻松进入。

  3. 在任何一种情况下,如果您可以使用该语言做一些有用的事情,您将获得更多的学习经验。听起来你有动力使用Lisp(Emacs)和F#(.NET互操作),所以我会看看两者并看看是什么吸引了你的注意力。

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

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

  • 口齿不清是动态型的,而F#是静态的类型。
  • 口齿不清有宏观的。F#不。

虽然它们都被认为是功能性的和有许多共同特点,它们也是不同的。学舌头肯定会让你成为一个更好的F#程序员,反之亦然,但你仍然会必须学习特殊性都能够切实际的。

对于能够互操作程序。净我当然会选择F#但为了编程的美丽我会尝试的口齿不清。

它们都是函数式语言,但从语法上来说它们是非常不同的。这意味着很多概念将是相似的,你(作为一个程序开发人员)将不得不做同样的思维弯曲使用,但它们是非常不同的语言。

F#是 ML 的衍生物(被认为是全部衍生品,是一种不纯的功能语言)而 Lisp 更老,被认为是是一个“纯粹的”功能语言。

功能语言的纯度是一个引人入胜的主题,我建议您阅读语言纯度和肮脏和清洁功能以更好地理解这个概念:

  

很多人谈论“纯粹”的   功能语言,其中“纯”语言   似乎是“好”的同义词。   通常有两个特征   与a的定义相关联   纯函数式语言:

     
      
  1. 功能不能有副作用
  2.   
  3. 使用任何给定参数调用的函数将始终返回相同的函数   值。
  4.   

我只是F#的新手,但我在F#之前研究过Lisp,并且相信它在.NET框架和编程语言的范围内对F#进行语境化非常有帮助。

我衷心建议至少观看前几个视频:

http://groups.csail.mit。 EDU / MAC /类/ 6.001 /埃布尔森-苏斯曼-讲座/

这些教你在第一个小时内掌握Lisp的基础知识。该系列以这些知识为基础,并灌输了那些令人兴奋的原则。

F#和Scheme的语义与强类型的注意例外非常相似。

另外,Scheme太小了,不去学习它!

作为一种编程语言,Lisp本身就很特别,但除了它们都支持函数式编程外,它与F#完全不相似。从Lisp到F#的语言结构并不多。如果你想学习lisp去吧。函数式编程的想法将不仅仅是语法。 Lisp真的很老了,50年代后期。许多语言受到它的影响,并且有很多方言。

如果您只是在F#之前寻找一种纯粹的功能性语言,我会建议使用Haskell。 Haskell受ML的影响很大,并且是F#的一种很好的过渡语言,因为F#是ML的衍生物。您可以查看Haskell代码并查看F#代码中的类似模式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top