转载自:https://mp.weixin.qq.com/s/4nZfuQpYqOer76xvXjyriw
过去的教训
与许多其他编程语言相比,Prolog很难学习。
部分原因是内在的:Prolog比许多其他编程语言更简单,功能更强大,因此,如果您更熟悉低级语言,则需要更长的时间来习惯于此。
但是,在现有教材的局限性中发现了一个更为重要的原因:在许多情况下,Prolog的教学方式与1980年代和1990年代的教学方式完全相同。过时的教材会导致误解:使用低级和不纯的语言特征会使Prolog程序复杂化或无法进行逻辑推理,从而迫使学生从过程式地而不是声明式地思考程序。
过去,这导致了很多挫败感,错误的印象和编码恐惧。对于初学者来说,很容易陷入困境,开始与低级问题搏斗,而忽略了更重要的原理。勿要落入这个陷阱!
Prolog也很难教,因为很难使您对Prolog程序所做的所有非正式声明都具有足够的通用性,以涵盖所有可能的使用模式。必须有意识的努力才能将这种普遍性传达给初学者。
目前的发展
在Prolog社区中,当前的大多数发展都集中在提高逻辑纯度上,并使纯代码具有更多功能和效率。
ISO标准化过程是提高不同的Prolog系统之间的兼容性的重要手段。
Web服务和数据分析是Prolog越来越重要的应用领域。
Prolog的最新和持续发展发生在与学术界密切相关的大学和机构中。当代重要的研究领域包括概率逻辑程序设计,答案集程序设计(ASP)和满足某些安全标准或其他有趣的声明性属性的语言方言。
作为应用程序程序员和Prolog从业人员,您可以通过熟悉现代Prolog功能,将其应用到自己的程序中以及与Prolog供应商讨论改进机会来为这些开发做出贡献。连续和广泛使用有助于确保这些功能不断改进。
开始
新的声明性语言特性的出现和广泛应用证明了教授Prolog需要与过去不同的必要性。
如今,将大量演讲用于解释低级语言构造的复杂性已变得越来越不合适,这些语言构造长期以来已被更广泛的替代品所取代。时间最好花在其他地方:用自然涵盖现代语言构造的方式来解释逻辑编程的基础。这将保留完整的通用性,并允许双方的声明和程序性阅读,而不是排除一个或另一个。
要真正欣赏Prolog的现代功能,您还必须考虑他们的历史:上一代的Prolog讲师敏锐地意识到与他们所教的结构相关的声明性限制,但没有其他选择。在许多情况下,导师本身也是艰难寻求更优雅,更通用结构的先驱之一。
实例化故障
有一种错误是当问题中包含太多变量时。
现在,从逻辑上讲,这根本没有错误。问题“ plus(X,X,Y)”
有一套非常好的解{{X,Y)| X是一个整数,Y = 2 * X}。
从该草案中可以明显看出,几十年以来人们已经预见到非常具有声明性的功能。只是花了一些时间,才能完全实现许多先驱者所设想甚至是概述的技术。今天,我们完全符合设想的草案:
?- X + X #= Y.
2*X#=Y.
到目前为止,诸如约束之类的声明性功能已广泛传播,并且在所有流行的Prolog系统中至少在某种程度上可用。对于从事声明式语言研究的许多人来说,这是一个梦想成真,并且仍在实现。这些功能是要使用的。我的意思不仅是有趣,而且是语言不可或缺的一部分。尚未包含其中某些功能的Prolog系统将随着它们的流行而采用它们。
将来,最有影响力的Prolog书籍将是那些最能清楚地揭示纯核心内容的书籍 Prolog以及逻辑编程和约束的独特优势和应用机会,例如:
1、声明式调试
2、声明整数算法
3、组合优化。
通过完全拥护这些概念并最大限度地利用它们,子孙后代终于可以从Prolog的强大中受益。
来自微信公众号:人工智能Prolog
过去的教训
与许多其他编程语言相比,Prolog很难学习。
部分原因是内在的:Prolog比许多其他编程语言更简单,功能更强大,因此,如果您更熟悉低级语言,则需要更长的时间来习惯于此。
但是,在现有教材的局限性中发现了一个更为重要的原因:在许多情况下,Prolog的教学方式与1980年代和1990年代的教学方式完全相同。过时的教材会导致误解:使用低级和不纯的语言特征会使Prolog程序复杂化或无法进行逻辑推理,从而迫使学生从过程式地而不是声明式地思考程序。
过去,这导致了很多挫败感,错误的印象和编码恐惧。对于初学者来说,很容易陷入困境,开始与低级问题搏斗,而忽略了更重要的原理。勿要落入这个陷阱!
Prolog也很难教,因为很难使您对Prolog程序所做的所有非正式声明都具有足够的通用性,以涵盖所有可能的使用模式。必须有意识的努力才能将这种普遍性传达给初学者。
目前的发展
在Prolog社区中,当前的大多数发展都集中在提高逻辑纯度上,并使纯代码具有更多功能和效率。
ISO标准化过程是提高不同的Prolog系统之间的兼容性的重要手段。
Web服务和数据分析是Prolog越来越重要的应用领域。
Prolog的最新和持续发展发生在与学术界密切相关的大学和机构中。当代重要的研究领域包括概率逻辑程序设计,答案集程序设计(ASP)和满足某些安全标准或其他有趣的声明性属性的语言方言。
作为应用程序程序员和Prolog从业人员,您可以通过熟悉现代Prolog功能,将其应用到自己的程序中以及与Prolog供应商讨论改进机会来为这些开发做出贡献。连续和广泛使用有助于确保这些功能不断改进。
开始
新的声明性语言特性的出现和广泛应用证明了教授Prolog需要与过去不同的必要性。
如今,将大量演讲用于解释低级语言构造的复杂性已变得越来越不合适,这些语言构造长期以来已被更广泛的替代品所取代。时间最好花在其他地方:用自然涵盖现代语言构造的方式来解释逻辑编程的基础。这将保留完整的通用性,并允许双方的声明和程序性阅读,而不是排除一个或另一个。
要真正欣赏Prolog的现代功能,您还必须考虑他们的历史:上一代的Prolog讲师敏锐地意识到与他们所教的结构相关的声明性限制,但没有其他选择。在许多情况下,导师本身也是艰难寻求更优雅,更通用结构的先驱之一。
实例化故障
有一种错误是当问题中包含太多变量时。
现在,从逻辑上讲,这根本没有错误。问题“ plus(X,X,Y)”
有一套非常好的解{{X,Y)| X是一个整数,Y = 2 * X}。
从该草案中可以明显看出,几十年以来人们已经预见到非常具有声明性的功能。只是花了一些时间,才能完全实现许多先驱者所设想甚至是概述的技术。今天,我们完全符合设想的草案:
?- X + X #= Y.
2*X#=Y.
到目前为止,诸如约束之类的声明性功能已广泛传播,并且在所有流行的Prolog系统中至少在某种程度上可用。对于从事声明式语言研究的许多人来说,这是一个梦想成真,并且仍在实现。这些功能是要使用的。我的意思不仅是有趣,而且是语言不可或缺的一部分。尚未包含其中某些功能的Prolog系统将随着它们的流行而采用它们。
将来,最有影响力的Prolog书籍将是那些最能清楚地揭示纯核心内容的书籍 Prolog以及逻辑编程和约束的独特优势和应用机会,例如:
1、声明式调试
2、声明整数算法
3、组合优化。
通过完全拥护这些概念并最大限度地利用它们,子孙后代终于可以从Prolog的强大中受益。
来自微信公众号:人工智能Prolog