Как переменные передаются в Прологе? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть квадрат функции, который я хотел бы отобразить в виде матрицы:

XXX (newline)
XXX (newline)
XXX 

Мой результат равен false после печати первой строки. Зачем? Как переменные передаются в Прологе и как выполняются строки (порядок)?

line(Rez,X) :- Rez>=1 , write(X) , line(Rez-1,X).

square(N,X) :- Rez = N,line(Rez,X),nl,N>1,square(N-1,X).

1 Ответ

1 голос
/ 29 мая 2019

Есть несколько проблем с вашим кодом.Примечательно, что вы пишете рекурсивные определения предикатов без базовых вариантов.Другая проблема заключается в том, что Пролог не является функциональным языком.Когда вы пишете, например, line(Rez-1,X), Пролог не будет оценивать Rez-1 как арифметическое выражение.Для Пролога Rez-1 - это просто '-'/2 составной термин, то есть термин с именем - и двумя аргументами.Вам нужно будет написать что-то вроде NextRez is Rez-1, line(NextRez,X).Стандартный встроенный предикат is/2 оценивает свой второй аргумент (как арифметическое выражение) и объединяет полученный результат с первым аргументом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...