作为我的第一门编程语言,我决定学习Haskell。我是分析哲学专业的学生,Haskell允许我快速而正确地创建感兴趣的程序,例如,用于自然语言解析的转换器,定理证明和解释器。尽管我只从事了两个半月的编程,但我发现Haskell的语义和语法比更传统的命令式语言更容易学习,并且对大多数构造感到满意(现在)。
但是,在Haskell中进行编程就像是巫术,我想扩展我的编程知识。我想选择一种新的编程语言来学习,但是我没有足够的时间来挑选一种任意的语言,删除它并重复。所以我想在这里提出这个问题,以及关于我要寻找的语言类型的一些规定。有些是主观的,有些是为了简化从Haskell的过渡。
- 强类型系统。在Haskell中,我最喜欢的编程部分之一是编写类型声明。这有助于构造我对单个功能及其与程序整体关系的思想。这也使非正式的推理程序变得更加容易。我关注的是正确性,而不是效率。
- 强调递归而不是迭代。我在Haskell中使用了迭代构造,但是递归地实现了它们。但是,与复杂的迭代过程相比,了解递归函数的结构要容易得多,尤其是在使用组合器和高阶函数(例如图,折叠和绑定)时。
- 奖励学习。Haskell是一种有用的工作语言。这有点像阅读Kant。但是,几年前我没有使用C的经验。我不是在寻找C。这种语言应该执行一种概念上有趣的范式,就我完全主观的观点而言,C语言不是。
权衡答案:当然,这些只是笔记。我只想回复所有给出正确答案的人。您一直很有帮助。
1)若干答复表明,强调递归的强大的静态类型语言意味着另一种功能语言。尽管我想继续与Haskell进行紧密合作,但是camccann和larsmans正确地指出,另一种这样的语言会“过度简化过渡”。这些评论非常有帮助,因为我不想用Caml写Haskell!在证明助手中,Coq和Agda都很有趣。特别是,Coq将为构造逻辑和形式类型理论提供扎实的介绍。我花了一会儿时间来研究一阶谓词和模态逻辑(Mendellsohn,Enderton和某些Hinman),所以我可能会对Coq感到很多乐趣。
2)其他人则非常喜欢Lisp(通用Lisp,Scheme和Clojure)。据我了解,Common Lisp和Scheme都有出色的入门资料(关于Lisp和The Reasoned Schemer,SICP)。SICP中的材料使我倾向于使用Scheme。特别是,通过SICP进行的计划将涵盖不同的评估策略,懒惰的实现,并有机会关注诸如延续,解释器,符号计算等主题。最后,正如其他人指出的那样,Lisp对代码/数据的处理将是全新的。因此,我非常倾向于选项(2),即Lisp。
3)第三,序言。Prolog有很多有趣的材料,它的主要领域正是我感兴趣的领域。它的语法简单,易于阅读。目前,我无法发表更多评论,但是在阅读了Prolog的概述并浏览了一些入门资料之后,它的排名为(2)。看来,Prolog的回溯一直被黑客入侵Haskell!
4)在主流语言中,Python看起来最有趣。蒂姆·耶茨(Tim Yates)使这些语言听起来很吸引人。显然,Python通常是针对一年级CS专业的学生而教。因此它在概念上丰富或易于学习。我必须做更多的研究。
谢谢大家的建议!看起来像Lisp(方案,Clojure),Prolog或像Coq或Agda这样的证明助手是推荐的主要语言。