为什么在2021年学习Prolog?

2021-01-08 22:06:49

为什么要在2021年学习Prolog?我最好对这个问题有一个答案,因为我很快会为Prolog课程提供指导。虽然我是这种非同寻常的编程语言的个人崇拜者,但学生们理所当然地会要求超越我的喜好的理由。当然,Prolog并不是2021年学习的最迷人的编程语言。尽管Prolog缺乏普及性,但是有充分的理由学习Prolog,下面我将探讨其中的三种。

也许我的哲学背景有助于解释我对Prolog的喜爱。一阶谓词逻辑不仅作为基本思想工具教授给所有哲学专业的学生,​​而且还构成了Prolog逻辑编程范例的基础。哲学家的目标是对世界进行逻辑描述,而Prolog则通过允许我们通过逻辑描述来操纵现实而超越了这一野心。我们通过编写Horn子句来解决问题,而Horn子句是简化解析的逻辑公式。逻辑公式是解决问题的工具。一旦被掌握,逻辑上描述问题并让计算机解决问题的想法几乎是无法抗拒的。

当然,Prolog有时不符合按描述编程范式。在某些情况下,Prolog混合使用逻辑和控制而不是分开。[0]但是,逻辑编程是Prolog的主要范例,它具有自己的智力吸引力。从智力美学的角度来看,好的Prolog代码是一种崇高的体验(erhabene Erfahrung)。[1]这样的Prolog代码揭示了逻辑描述的压倒性力量和一种能力的力量-一种能力的力量-用逻辑术语描述世界从而解决问题的能力-驻留在我们所有人中。

总而言之,Prolog代码具有永恒的美感-我认为这种说法更常见于LISP的S表达式-因此值得学习。我知道对美的吸引力是有其局限性的,但是编程语言的美学特性不应完全被忽略。我们的知识美感是创造的重要工具,需要接受培训。如果人们了解使方法变得美观的原因,那么当它偏离实际的关注点时,创建美观的代码和抵制美观的诱惑将变得更加容易。学习Prolog是驯服漂亮代码功能的一种方式。

递归,列表操作和图跳是基础计算机科学的标准主题,Prolog则一一解决了这些问题。[2] Prolog通常在刚开始的第一堂课就对计算机科学的经典问题提供不同的观点。因此,Prolog的学习曲线相对较陡,但不同的观点也可能具有启发性。人们学会以Prolog号角条款的形式描述古典问题,从而解决这些问题,这可能会导致一种独特的理解它们的方式,尤其是一旦人们学会了编写惯用的Prolog。

Prolog不仅漂亮,而且还揭示了应用它的计算机科学核心问题的另一个方面。有时,Prolog揭示的方面也是解决问题需要看到的方面。有些问题需要Prolog。学会了Prolog的人将可以精美而有效地解决这些问题。老实说,目前此类问题很少出现,不足以证明学习Prolog是正确的。但是我不认为必须如此。作为支持学习Prolog的最后一个论点,我将建议它具有未实现的潜力。

作为计算机科学专业的学生,​​可以始终遵循炒作来取得良好的职业发展,但要脱颖而出,必须与传统做法脱节。那些愿意探索不受欢迎的领土的人有机会领先于人群。在2021年,Prolog就是这样不受欢迎的地区。在我的NLP领域,人们可能会选择学习更多有关神经网络,尤其是BERT等Transformer架构的信息。对于NLP的职业来说,学习这些主题当然是明智的选择,但这并不能使您脱颖而出。

Prolog并不受欢迎,更重要的是,我认为Prolog到目前为止尚未发挥其潜力。逻辑编程范例在逻辑和控制之间具有强大的分离能力。然而,在当前的应用中并没有发现太多用途。尽管功能强大,但这种不受欢迎的现象可能会阻止学生学习Prolog –也许逻辑编程有一些缺点使它无法获得成功–但它也是一个机会。可以打赌,更多的产品将会来自Prolog或类似的语言。[3]如果下注成功,则将领先于炒作。

这种对不受欢迎的选择的押注是有风险的。由于成功的机会有限,因此这是一个高回报的下注。话虽这么说,我建议在自己的一生中做一些这样的下注。即使他们一无所获,它们也会使生活变得更加有趣,并有助于展现个性。也许不应该全力以赴,但是这种考虑应该证明Prolog课程的几个小时是合理的,因为它不仅可以更好地评估Prolog的潜力,而且还获得了学分。

当前,Prolog不属于最流行的编程语言。它的逻辑编程范例使其成为局外人。尽管如此,我认为学习Prolog有充分的理由。该语言很漂亮,它在经典计算机科学问题上提供了不同的观点,并且潜力巨大。无论您是出于美学,学术还是职业考虑的动机,都有理由在2021年学习Prolog。

更新此博客文章进入了Hacker News的首页,并收到了大量评论。作为回应,我写了一篇后续文章。

[0]我在这里指的是罗伯特·科瓦尔斯基(Robert Kowalski)的算法=逻辑+控制。

[1]我希望康德人能够原谅我将崇高精神(das Erhabene)视为一种美丽,而忽略了康德的独特之处。

[2]例如,看一下《序言的力量》中的quicksort实现。