Оператор пролога =: =

Если необходимо избавиться от.. часть, можно использовать Систему. Объект IO.DirectoryInfo. Используйте 'fred\frog..\frag' в конструкторе. Свойство FullName даст Вам нормализованное имя каталога.

единственный недостаток состоит в том, что это даст Вам весь путь (например, c:\test\fred\frag).

27
задан false 3 February 2014 в 12:20
поделиться

3 ответа

?- 2+3 =:= 6-1.
true.

?- 2+3 is 6-1.
false.

Также см. Документы http://www.swi-prolog.org/pldoc/man?predicate=is/2

24
ответ дан 28 November 2019 в 04:01
поделиться

Я нашел свой собственный ответ, http://www.cse.unsw.edu.au/~billw/prologdict.html

6
ответ дан 28 November 2019 в 04:01
поделиться

Я думаю, что приведенный выше ответ, тем не менее, заслуживает нескольких слов пояснения.

Небольшое замечание заранее: арифметические выражения в Прологе - это просто термины («Все - это термин в Прологе») , которые не оцениваются автоматически . (Если у вас есть опыт работы с Lisp, подумайте о цитируемых списках). Итак, 3 + 4 - это то же самое, что + (3,4) , который сам по себе ничего не делает. Ответственность за оценку этих терминов лежит на отдельных предикатах.

Несколько встроенных предикатов выполняют неявную оценку, в том числе операторы арифметического сравнения, такие как =: = и это . =: = оценивает оба аргумента и сравнивает результат, is принимает и оценивает только его правый аргумент в качестве арифметического выражения.

Аргумент left должен быть атомом, либо числовой константой (которая затем сравнивается с результатом вычисления правого операнда), либо переменной. Если это связанная переменная , ее значение должно быть числовым и сравниваться с правым операндом, как в первом случае. Если это несвязанная переменная , результат вычисления правого операнда привязан к этой переменной. is часто используется в последнем случае для связывания переменных.

Чтобы взять пример из приведенного выше Словаря Пролога: Чтобы проверить, является ли число N четным, вы можете использовать оба оператора:

0 is N mod 2  % true if N is even
0 =:= N mod 2 % dito

Но если вы хотите зафиксировать результат операции, вы можете использовать только первый вариант. Если X не связан, то:

X is N mod 2   % X will be 0 if N is even
X =:= N mod 2  % !will bomb with argument/instantiation error!

Практическое правило: если вам просто нужно арифметическое сравнение, используйте =: = . Если вы хотите зафиксировать результат оценки, используйте равно .

87
ответ дан 28 November 2019 в 04:01
поделиться
Другие вопросы по тегам:

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