Сравнить список в прологе - PullRequest
3 голосов
/ 09 июня 2019

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

[[A],B,C]=[[a,b,c],[d,e,f],1].

Ответы [ 2 ]

2 голосов
/ 09 июня 2019

Вот еще один способ ответить, почему ваш запрос терпит неудачу, используя library(diadem):

?- [[A],B,C]=[[a,b,c],[d,e,f],1].
false.

?- [[A],B,C]=[[a,b,c],[d,e,f],1].?X.
   X =  ([[A]|_]=[[_,_|_]|_])                        /* 1 */
;  X =  (dif(A100,B100),[[A|A100]|_]=[[_|B100]|_])   /* 2 */
;  X =  (dif(A100,B100),[A100|_]=[B100|_])           /* 3 */
;  X =  (dif(A100,B100),A100=B100) ...               /* 4 */

Здесь система генерирует большинство общих обобщений , которые все еще не работают.

Первое обобщение удаляет все не относящиеся к делу части, что остается, это [A] и [_,_|_].

Второе обобщение настаивает на том, что хвост обоих списков просто различен (вместо того, чтобы настаивать на том, что они [] и [_|_], как указано в первом обобщении).

Третий и четвертый - просто более общие взгляды на него.

2 голосов
/ 09 июня 2019

Краткий ответ : [A] является списком singleton , но соответствующий элемент [a,b,c] имеет три элемента.

Вы стремитесь к совпадению [[A], B, C] с [[a,b,c], [d,e,f], 1]. Таким образом, это означает, что вы хотите сопоставить список с тремя элементами с [[a,b,c], [d,e,f], 1]. Кроме того, это означает, что вы хотите сопоставить [A] = [a,b,c], B = [d,e,f] и C = 1. Однако [A] может не совпадать с [a,b,c], поскольку [A] означает список singleton .

Вы, вероятно, хотите сопоставить это с [A,B,C] вместо:

?- [[A],B,C]=[[a,b,c],[d,e,f],1].
false.

?- [A,B,C]=[[a,b,c],[d,e,f],1].
A = [a, b, c],
B = [d, e, f],
C = 1.

Если вы хотите сопоставить с непустым списком, с A первым элементом, вы можете сопоставить это с [A|_] вместо:

?- [[A|_],B,C]=[[a,b,c],[d,e,f],1].
A = a,
B = [d, e, f],
C = 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...