我是 Python 和 prolog 的新手。据我了解,Python 是一种强类型语言。Prolog 也是一种强类型语言吗?
4 回答
与 Python 一样,如果您尝试添加非整数的内容,Prolog 会给您一个类型错误。但这只是 Prolog 为您做的事情的极限。说 Prolog 是或不是“强类型”并不是很有用——我已经写了很多关于“强类型”的问题的答案,并重写了其他人对“强类型”问题的错误答案,我从来不想再次听到这些话。然而在某个地方,互联网上的某个人是错误的。
以下是有用的知识:
Prolog 和 Python 都是动态类型的,也就是说直到运行时才检查程序的“类型错误”。在这种情况下,典型的“类型错误”是应用于“错误”类型值的函数/方法(Python)或关系(Prolog)。Python 会检测你对错误数量的参数应用某些东西的情况。
在 Python 中,有相当多的术语(表达式)是错误类型的,即在运行时会因为类型错误而被拒绝。
在 Prolog 中,几乎每个术语根据定义都是类型正确的。例如,用户定义的函子可以应用于任何长度的术语列表,Prolog 会乐于将其解释为格式良好的关系。如果你得到一个“错误”数量的关系参数,Prolog 不会将其视为类型错误;它只是假设你有两个不同的关系与同名的不同的arities。(这种行为是否有用还有待商榷,但这就是 Prolog 的行为方式。)Prolog 对 IS 等内置关系更为严格,如
X is Y + Z
真正有用的是,在 Prolog 中,动态类型系统拒绝的术语很少——比 Python 的动态类型系统要少得多。如果在这个帐户上您选择将 Prolog 称为“较弱”而将 Python 称为“更强”,则可以这样做,因为术语“强”和“弱”没有任何普遍认可的技术含义。但是你最好想想,并说,Prolog 的动态类型系统接受几乎所有类型的关系和术语——不像 Python 的那样。这样你就可以交流实际发生的事情。
Python 是强类型的。
IE:
"1" + 1
加注TypeError
我相信 Prolog 不是强类型的。
Prolog不是强类型语言。
[...] Prolog 也是一种强类型语言吗?
不