Пролог, как найти все координаты в формате "X / Y" на сетке N by N - PullRequest
0 голосов
/ 15 мая 2018

Я видел много учебных пособий, которые задают подобные вопросы, но проблема, с которой я столкнулся, заключается в том, что наш инструктор хочет, чтобы мы представляли наши координаты, используя переменные точной формы "X / Y", с косой чертой вв середине, и я не уверен, как отобразить онлайн пример того, как отобразить код типа numlist(1,N,ListToGenerate). в этот формат.

Итак, в качестве конкретного примера я хочу знать, как мне создать список, в котором значения варьируются от 1/1 до N / N , а более абстрактно, что вы даже называете переменными в этом формате? Они не являются кортежами и не являются списками из двух элементов ... Я хочу называть их составными переменными, но я не уверен, что это тоже правильно

1 Ответ

0 голосов
/ 15 мая 2018

Если вы когда-либо не уверены, что такое термин «на самом деле», используйте write_canonical/1, чтобы получить каноническое представление термина.

Например:

?- write_canonical(a/b).
<b>/(a,b)</b>

Итак, вы видите: термин вида X/Y - это термин /(X,Y), то есть, как любой другой составной термин . В данном конкретном случае функтором является /, который также является инфиксным оператором , так что вы можете использовать инфиксную нотацию в дополнение к функциональной нотации. То, что вы называете «кортежами», является и составными терминами. На самом деле, у Пролога нет «кортежей».

Вы создаете такие термины точно так же, как и все остальные термины: вы можете либо записать их напрямую , как в [1/1,1/2,1/3,...] или описать их с помощью предикатов.

В вашем конкретном случае предикат all-solution , такой как findall/3, может помочь вам собрать все решения between/3 в список:

findall(X/Y, ..., List)

где я оставляю часть ... как вызов.

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