Который является языком со строгим контролем типов: Python или Пролог?

Я плохо знаком с Python и прологом. От моего понимания Python является языком со строгим контролем типов. Действительно ли Пролог является языком со строгим контролем типов также?

7
задан Charlie Salts 7 May 2010 в 00:34
поделиться

4 ответа

Пролог - не сильно типизированный язык.

ссылка: http://scom.hud.ac.uk/scomtlm/book/node187.html

2
ответ дан 6 December 2019 в 14:01
поделиться

[...] Пролог тоже является строго типизированным языком?

Нет

0
ответ дан 6 December 2019 в 14:01
поделиться

Как и Python, Prolog выдаст вам ошибку типа, если вы попытаетесь добавить то, что не является целыми числами. Но это лишь предел того, что Prolog может сделать для вас. Не очень полезно говорить, что Prolog является или не является "сильно типизированным" - я уже написал так много ответов на вопросы о "сильно типизированных", и переписал неправильные ответы других людей на вопросы о "сильно типизированных", что я никогда не хочу слышать эти слова снова. И все же где-то, кто-то в Интернете ошибается.

Вот что полезно знать:

  • И Prolog, и Python являются динамически типизированными, то есть программы не проверяются на "ошибки типа" до времени выполнения. Типичная "ошибка типа" в этом случае - это функция/метод (Python) или отношение (Prolog), применяемые к "неправильным" типам значений. А Python обнаружит случаи, когда вы применяете что-то к неправильному количеству аргументов.

  • В Python довольно много терминов (выражений), которые плохо типизированы, т.е. будут отвергнуты во время выполнения из-за ошибок типа.

  • В Prolog почти каждый термин является корректным по определению. Например, определяемый пользователем функтор может быть применен к любому списку терминов любой длины, и Пролог радостно попытается интерпретировать его как хорошо сформированное отношение. Если вы получаете "неправильное" количество аргументов отношения, Prolog не рассматривает это как ошибку типа; он просто предполагает, что у вас есть два разных отношения с разным числом аргументов с одинаковым именем. (Полезно ли такое поведение - вопрос спорный, но Prolog ведет себя именно так). Пролог немного строже относится к встроенным отношениям типа IS, как в

    X это Y + Z
    

Что верно и полезно знать, так это то, что в Прологе система динамических типов отвергает очень мало терминов - гораздо меньше, чем система динамических типов Python. Если в связи с этим вы решите назвать Prolog "слабым", а Python "сильным", вы можете это сделать, потому что термины "сильный" и "слабый" не имеют общепринятого технического значения. Но вам будет лучше думать и говорить, что система динамических типов Пролога принимает почти все отношения и термины как хорошо типизированные - в отличие от системы Python. Таким образом вы передадите то, что происходит на самом деле.

8
ответ дан 6 December 2019 в 14:01
поделиться

Python строго типизирован.

то есть:

"1" + 1

Вызывает TypeError

Я считаю, что Пролог не является строго типизированным.

5
ответ дан 6 December 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: