Как проверить наличие пустых аргументов в прологе? - PullRequest
0 голосов
/ 10 марта 2020

Я новичок в прологе и могу использовать некоторую помощь. В настоящее время мне приходится создавать программу, которая объединяет последний символ из двух строк.

Например,

    ?- termCat(with,spaghetti,T).
    T=hi

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

   ?- termCat( , spaghetti,T).
   T = i

1 Ответ

0 голосов
/ 10 марта 2020

Я использую этот шаблон для «аргументов по умолчанию» (особенность C ++, вроде). В зависимости от вашего варианта использования и системы Prolog, вы должны адаптироваться по мере необходимости. Помните, что var / 1, nonvar / 1,! / 0 являются встроенными нечистыми , которые могут неожиданно помешать процессу разрешения. Сокращение (то есть! / 0) неявно в -> / 2.

termCat(X,Y,T) :-
  (var(X) -> X=with;true),
  (var(Y) -> Y=spaghetti;true),
  etc etc.

В SWI-Prolog вы можете требовать, чтобы аргументы не были свободными, например, используя утверждение / 1 из библиотеки (отладка):

:- use_module(library(debug)).
termCat(X,Y,T) :-
  assertion((nonvar(X),nonvar(Y))),
  etc etc.
...