Использование SWI-Prolog, синтаксис, синглтон-ошибки

Мне нужно использовать SWI-пролог, чтобы решить логическую головоломку для домашней работы, но я нахожу синтаксис и значение очень громоздкими даже с моим опытом программирования. Проблема, с которой я сталкиваюсь, это ошибка в одноэлементных переменных, и загадка возвращает ложь.

Это то, что я сделал до сих пор:

:- use_module(library(clpfd)).

sends(K,priscilla,C),
    C#\=rose.
sends(carol,L,rose).
sends(dick,L,sun).

sends(K,L,landscape).
sends(bob,rhonda,C).
sends(edna,quincy,C).

sends(K,simon,deer).
sends(K,tina,C).

solve :-
    sends(
        [alice,bob,carol,dick,edna],
        [priscilla,rhonda,quincy,simon,tina],
        [rose,heart,sun,landscape,deer]).

Это вопрос, я буду очень признателен за мягкое толчок в правильном направлении или ответ, который поможет мне лучше понять язык!вопрос

1 ответ

Решение

Вы получите единственную ошибку везде, где у вас есть единственная переменная использования. Кажется, это ваше единственное использование переменных, так что я ожидаю, что вы получите это много. Ваш код выше эквивалентен:

sends(_,priscilla,C),
    C#\=rose.
sends(carol,_,rose).
sends(dick,_,sun).

sends(_,_,landscape).
sends(bob,rhonda,_).
sends(edna,quincy,_).

sends(_,simon,deer).
sends(_,tina,_).

Если это выглядит странно или неправильно с одноэлементными переменными, замененными на _Это хороший показатель того, что вам не хватает логики. Обратите внимание, что аргументы sends/3 как вы написали, кажется, что он атомарный, что делает этот вызов особенно странным:

sends(
    [alice,bob,carol,dick,edna],
    [priscilla,rhonda,quincy,simon,tina],
    [rose,heart,sun,landscape,deer]).

Нет никаких оснований ожидать, что Пролог волшебным образом преобразует это использование sends/3 со списками в какой-то другой вызов с атомами. Я понятия не имею, что вы ожидаете здесь произойти.

Такие головоломки являются очень популярными задачами для Пролога. Ищите архивы здесь - их было несколько только за последние несколько дней - и вы должны найти вдохновение.

Другие вопросы по тегам