需要为C#程序员学习Prolog,Haskell

时间:2009-07-20 12:04:05

标签: c# haskell prolog

我是一名C#程序员,经过一些关于函数式编程和声明式编程的精彩讨论。我觉得我两个都不擅长:P,所以,我正在考虑开始学习prolog和haskell。请告知这样做的可行性。如果我学习F#,那么学习Haskell是否有意义?这些语言能为我提供哪些特性可以帮助我编写更好的c#程序?

8 个答案:

答案 0 :(得分:7)

很少有语言X,如果有的话你不能写一个Reg What I learned from Language X that makes me a better programmer when I use Language Y

形式的Reg Braithwaite批准的帖子

C#本身正在积累许多功能结构 - lambda表达式和System.Linq扩展方法 - 所以学习功能性思考肯定会帮助你充分利用日常工作语言,以及本身很有趣。事实上,Erlang是我在C#之后选择的第一个功能/模式匹配语言,但仅此一点就足以让我再次看到我的C#风格以及我如何处理问题。

FP正在成为下一个重要的事情,并且没有缺乏语言可供查看和决定最适合学习的语言 - Haskell,Erlang,以及新人F#,Scala& Clojure都在这波浪潮中。

答案 1 :(得分:7)

  1. 就像你第一次从命令式转向面向对象一样,使用函数式编程需要重新思考如何思考问题。第一次你倾向于以混合方式做事,直到你得到它的全部要点。由于你来自C#后台,我建议尝试F#因为你可能会更快地习惯它,因为.net语言共享一个足以让你入门的通用框架。

  2. 那说直接去Prolog和Haskell并不是一个坏主意,但是与C#和F#之间的飞跃相比,你可能必须先调整语言的不同语法和库。就个人而言,我通过2本书RealWorldHaskellThe Craft of Functional Programming从C#/ Java转到Haskell,并且管理得很好,所以你没有理由不能这样做。 :)

  3. 学习F#然后Haskell仍然需要一些工作,因为F#和Haskell是不同的:第一个是“不纯”,而第二个是“纯粹”。杂质意味着某些“副作用”(如状态和IO)本质上是允许的,而纯度意味着您不会立即获得它们但必须使用某些方法(例如monad)。来自C#可能更容易尝试F#,然后是Haskell的原因。

  4. 我相信(个人意见警告),如果你想成为一个更好的C#程序员,了解F#和Haskell(或其他任何事情)永远不会受到伤害!特别是在F#的情况下,它可以与C#集成。函数式编程可以为您提供某些特定的功能,并且知道它可能迟早会变得有用,特别是因为它似乎像其他人所说的那样,目前有功能语言程序的趋势。

答案 2 :(得分:4)

学习函数式编程来自像C#这样的命令式语言非常难,它是一种全新的思维方式(至少对我来说,你可能会发现函数式语言更容易理解!取决于你的大脑是如何工作的;)

F#是一个不错的选择,因为它位于CLR上,这意味着您可以轻松地使用从C#代码编写的F#库。

F#通常更适合“功能性”(数学)问题。

我正在考虑使用F#在我的C#代码中重写一些复杂的算法,以使它们更快更简洁。

艾哈迈德提到。学会以新的方式思考问题只会是有益的!

答案 3 :(得分:3)

学习一门新语言我永远不会受伤。我要去引用这句话,但是这句话是“如果你不知道怎么写思想,你就不知道怎么想这个想法”。 它是在自然语言的背景下,但我认为它也适用于编程语言。

看看prolog和haskell并稍微修补一下。它至少会为你的皮带添加工具。

答案 4 :(得分:2)

功能和逻辑(声明性)编程是另一种编程范式,你从另一个角度思考。

但是这两种范例可能对使用c#的编码没有直接影响,但是当你在思考问题本身时它可能是间接的

答案 5 :(得分:2)

我从prolog开始,因为它更容易。会给你一种新范式的感觉。然后去看看haskell或f#。

我建议使用f#over haskell,因为通常可以更容易地创建与c#和.net兼容的库,从而使其更有用

答案 6 :(得分:2)

我在这里看到的意见是,最初开始学习prolog更好。我个人不同意。函数式编程更接近于您在其他语言中可以执行的操作。例如,在C ++中,您有许多方法来自函数式编程视角(stl算法,boost :: bind,boost :: lambda等)。我不知道C#,但我被告知它发生了同样的事情。

所以我认为从功能语言开始会更容易。我个人知道haskell,scheme和prolog,而且我认为,如果你立即开始统一,跨越搜索,规则等等,它可能会让你的思绪爆炸(至少可能炸掉我的东西;-))。再一次只是一个意见......

答案 7 :(得分:-5)

我认为学习这两种语言都不会帮助你成为更好的C#程序员。我会花时间在C#中练习编程。