Если вы когда-либо не уверены, что такое термин «на самом деле», используйте 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)
где я оставляю часть ...
как вызов.