Пролог: обработка ошибок и поиск уникальных - PullRequest
0 голосов
/ 04 марта 2010

Дано:

fruitid('Apple', 'Granny Smith', 1).
fruitid('Apple', 'Cox', 2).
fruitid('Pear', 'Bartlett', 3).

Как мне найти только уникальные предметы, например:

is_unique(FruitName):-

В приведенных в примере предложениях ответ будет Pear.

Я также пытаюсь добавить обработку ошибок в мой код, поэтому в этом случае, если ввод:

is_unique(pineapple)

Как я могу поймать это и вывести сообщение об ошибке?

Спасибо

AS

1 Ответ

1 голос
/ 21 апреля 2010

Одно из решений состоит в следующем, используя отрицание Пролога:

is_unique(X) :- fruitid(X,T1,I1),
   \+ exists_other_fruit(X,T1,I1).

exists_other_fruit(X,T1,I1) :-
    fruitid(X,T2,I2),
    (T1,I1) \= (T2,I2).

Для обработки ошибок вы можете использовать оператор Пролог if / 3 (определенный, например, в SICStus Prolog; я не знаю о других Прологах) и делать следующее:

is_unique2(X) :-
      if(fruitid(X,T1,I1),\+ exists_other_fruit(X,T1,I1),
          (print('Unknown Fruit: '), print(X),nl,fail)).

Код работает следующим образом:

| ?- is_unique(X).
X = 'Pear' ? ;
no
| ?- is_unique2(X).  
X = 'Pear' ? ;
no
| ?- is_unique2('Apple').
no
| ?- is_unique2(pineapple).
Unknown Fruit: pineapple
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...