【问题标题】:Which is a strongly typed language: Python or Prolog?哪种是强类型语言:Python 还是 Prolog?
【发布时间】:2010-05-07 00:28:41
【问题描述】:

我是 Python 和 prolog 的新手。据我了解,Python 是一种强类型语言。 Prolog 也是一种强类型语言吗?

【问题讨论】:

  • 我不同意 Python 被强类型化,但有很多解释它的方法,如下所示:wiki.python.org/moin/…
  • @thyrgle 当然,有一个灰色区域,但是,就像打字一样动态,一旦python解释器确定了类型,就设置了该类型,并且没有混合类型。
  • @johnc:是的,但在强类型方面,它与 C、C++ 或 Java 完全不同。

标签: typing


【解决方案1】:

与 Python 一样,如果您尝试添加非整数的内容,Prolog 会给您一个类型错误。但这只是 Prolog 为您做的事情的极限。说 Prolog 是或不是“强类型”并不是很有用——我已经写了很多关于“强类型”的问题的答案,并重写了其他人对“强类型”问题的错误答案,我从来不想再次听到这些话。然而somewhere, someone on the Internet is wrong

以下是有用的知识:

  • Prolog 和 Python 都是动态类型的,也就是说直到运行时才检查程序的“类型错误”。在这种情况下,典型的“类型错误”是应用于“错误”类型值的函数/方法(Python)或关系(Prolog)。 Python 会检测您对错误 number 个参数应用某些内容的情况。

  • 在 Python 中,有很多术语(表达式)是错误类型的,即在运行时会因为类型错误而被拒绝。

  • 在 Prolog 中,几乎每个术语根据定义都是类型正确的。例如,用户定义的函子可以应用于 any 长度为 any 的术语列表,Prolog 将乐于尝试将其解释为格式良好的关系。如果你得到一个“错误”数量的关系参数,Prolog 不会将其视为类型错误;它只是假设您有两个不同的关系,具有相同名称的不同元素。 (这种行为是否有用还有待商榷,但这就是 Prolog 的行为方式。)Prolog 对 IS 等内置关系更为严格,如

    X is Y + Z
    

真正有用的是,在 Prolog 中,动态类型系统拒绝的术语很少——比 Python 的动态类型系统要少得多。如果在这个帐户上您选择将 Prolog 称为“较弱”而将 Python 称为“更强”,则可以这样做,因为术语“强”和“弱”没有任何普遍认可的技术含义。但是你最好想想,并说,Prolog 的动态类型系统接受几乎所有类型的关系和术语——不像 Python 的那样。这样您就可以传达实际发生的情况。

【讨论】:

  • 好吧,在某些地方肯定有强类型:?- atom(1)false,而 number(a) 也是假的。强类型有,但数量不多。
【解决方案2】:

Python 是强类型的。

即:

"1" + 1

提高TypeError

我相信 Prolog 不是强类型的。

【讨论】:

    【解决方案3】:

    Prolog 不是强类型语言。

    参考:http://scom.hud.ac.uk/scomtlm/book/node187.html

    【讨论】:

      【解决方案4】:

      [...] Prolog 也是一种强类型语言吗?

      没有

      【讨论】:

        猜你喜欢
        • 2013-02-03
        • 2010-09-12
        • 2011-04-29
        • 2012-12-29
        • 2011-09-12
        • 2018-11-12
        • 2015-01-10
        • 2010-10-05
        • 2015-08-15
        相关资源
        最近更新 更多