Я поеду в путешествие и возьму своих питомцев, у меня 3 животных (собака, кошка, крыса), но они не очень хорошо ладят. Я могу взять только 1 животное за раз, но я не могу оставить собаку с кошкой или кошку с хомяком наедине, потому что они буквально съели бы друг друга, я ищу Пролог, чтобы найти мой результат действительных переходов, чтобы получить в мой новый дом с моими 3 животными. Я взял мир блоков Братко, так как каждый блок я могу интерпретировать как 1 животное, а 3 списка, которые возникают в исходной задаче, я вижу как [[old house], [who do I take?], [new house]]
, нужно было бы только добавить правила, что животные не должны быть вместе и что цель заканчивается в третьем списке. пример того, что я ищу, следующий...
-? решение4([[собака,кошка,крыса],[],[]],X).
X = [[dog,cat,rat],[],[]], %%%this is my start
[[dog,rat],[cat],[]],
[[dog],[rat],[cat]],
[[dog],[cat],[rat]],
[[cat],[dog],[rat]],
[[],[cat],[rat,dog]],
[[],[],[rat,dog,cat]], %%% this is my goal
Меня не волнует порядок списка 3 [[], [], [new house]]
, меня волнует переход животных между каждым списком, чтобы они не дрались, когда я оставляю их одних.
другими словами...
Я новичок в программировании на прологе, у меня возник вопрос. Из мира блоков в книге Братко мне нужно расположить блоки СОБАКА КОТ КРЫСА, я просто не могу поставить КОШКУ с/поверх КРЫСЫ или наоборот, и >СОБАКА с/над КОШКОЙ или наоборот, и я могу проходить только блок за блоком, один за другим. У меня 3 места, результат упорядоченного списка должен быть на месте 3, примерно так: R = (ранее там все изменения, которые вы сделали, чтобы добраться до этого)... [[ ], [ ], [cat, крыса, собака]].
Это мой код...
s(Pilas, [Pila1, [Tope1|Pila2] | OtrasPilas ]) :-
quitar([Tope1|Pila1], Pilas, Pilas1),
quitar(Pila2, Pilas1, OtrasPilas).
quitar(X, [X|Ys], Ys).
quitar(X, [Y|Ys], [Y|Ys1]) :-
quitar(X,Ys,Ys1).
meta(Estado) :-
member([rat,dog,cat],Estado). % Here I need any order but in list 3
и мои ограничения...
invalido(dog,cat).
invalido(cat,dog).
invalido(cat,rat).
invalido(rat,cat).
verifica(Animal,NO_Llevar):-
invalido(Animal,Este_no),
NO_Llevar = Este_no.
и мой алгоритм поиска
camino(Nodo,Nodo,[Nodo]).
camino(PrimerNodo,UltimoNodo,[UltimoNodo|Camino]) :-
camino(PrimerNodo,MenosElUltimo,Camino),
s(MenosElUltimo,UltimoNodo),
\+ member(UltimoNodo,Camino).
solucion4(NodoInicial,Sol) :-
camino(NodoInicial,NodoMeta,Sol),
meta(NodoMeta).
[[ ], [ ], [Cat, Rat, Dog]]
на[[ ], [ ], [cat, rat, dog]]
, так как кто-то может подумать, что вы пытаетесь использовать свой код с переменными, а не со значениями. - person Guy Coder   schedule 14.11.2020verifica/2
? Вы показываете код, но я не вижу вызова к нему. Вы дали нам весь код? - person Guy Coder   schedule 14.11.2020invalido(dog,cat).
. Значит ли это, что собака не может быть рядом с кошкой? Означает ли это, что собака и кошка не могут быть друг над другом? - person Guy Coder   schedule 14.11.2020