Трудность в прологе

Я должен решить логическую проблему, используя Пролог. У меня есть всего одна проблема:

В ответе не появляется название признаков. Мой код, чтобы произвести признаки:

gera(p(Prof, AlunosProf, Tema, AlunosTema)) :-
       member(Prof, [palmira, roberta, selma]),
       member(AlunosProf, [40, 45, 50]),
       member(Tema, [transito, culinaria, reciclagem]);
       member(AlunosTema, [40, 45, 50]).

Но после выполнения вопроса это похоже на это:

S = [p(palmira, _G2046, transito, 45),
    p(roberta, 50, reciclagem, _G2053),
    p(selma, _G2056, culinaria, _G2058)]

Где "_G* <силен> что-то ", я хочу казаться название признака (в этом случае только число студентов).

Edit:

Добавление всего кода:

gera(p(Prof, AlunosProf, Tema, AlunosTema)) :-
       member(Prof, [palmira, roberta, selma]),
       member(AlunosProf, [40, 45, 50]),
       member(Tema, [transito, culinaria, reciclagem]),
       member(AlunosTema, [40, 45, 50]).


dif(p(P1, Q1, T1, Q12), p(P2, Q2, T2, Q22)) :-
    P1 \= P2, Q1 \= Q2, Q12 \= Q22, T1 \= T2.

tudoDif(P1, P2, P3) :-
    dif(P1, P2), dif(P1, P3), dif(P2, P3).

gera_ef(P1, P2, P3) :-
    P1 = p(palmira, _, _, _),
    P2 = p(roberta, _, _, _),
    P3 = p(selma, _, _, _).
    gera(P1), gera(P2), gera(P3),
    tudoDif(P1,P2,P3).

solucao(S) :-
        S = [P1, P2, P3],
    gera_ef(P1, P2, P3),
    member(p(palmira, X, transito, 45), S),
        member(p(selma, Z, culinaria, W), S),
        member(p(roberta, 50, reciclagem, R), S), 
    !.
1
nl ja de
olha o не редактируют почты meu; пожалуйста, проверьте редактировать в мой пост
добавлено автор Rubens, источник
Если ответ решил вашу проблему, пожалуйста, отметьте, это как действительный ответ на ваш пост, щелкая в кредит отмечает ниже голосующих стрел.
добавлено автор Rubens, источник
Alguma ideia do que pode Эстар errado, mineiro?
добавлено автор Rodrigo, источник
Valeu, cara. Я ajudaste bastante. Благодарите u приятеля. U помог мне так.
добавлено автор Rodrigo, источник

2 ответы

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

С тех пор, когда вы начинаете говорить, "что прибывает теперь", вы только определяете значения AlunosTema , другие ценности примут любого стоимость, представленная тем, что вы видели - "_G233...".

Попробуйте следующее:

gera(p(Prof, AlunosProf, Tema, AlunosTema)) :-
       member(Prof, [palmira, roberta, selma]),
       member(AlunosProf, [40, 45, 50]),
       member(Tema, [transito, culinaria, reciclagem]),
       member(AlunosTema, [40, 45, 50]).

Edit:

Рассмотрение целого кода, который вы опубликовали, можно изменить приблизительно несколько вещей:

...

gera_ef(P1, P2, P3) :-
    P1 = p(palmira, _, _, _),
    P2 = p(roberta, _, _, _),
    P3 = p(selma, _, _, _),
    gera(P1),
    gera(P2),
    gera(P3),
    tudoDif(P1,P2,P3).

solucao(S) :-
    S = [P1, P2, P3],
    gera_ef(P1, P2, P3),
    member(p(palmira, _, transito, 45), S),
    member(p(selma, _, culinaria, _), S),
    member(p(roberta, 50, reciclagem, _), S),
    !.

Проблема здесь состоит в том, что вы имели . вместо , в:

gera_ef(P1, P2, P3) :-
    ...,
    P3 = p(selma, _, _, _).
    ...

это не позволило бы остальной части кода выполнять.

Другое изменение было заменой неограниченных переменных в solucao с _ ; отметьте X, W, R были удалены.

0
добавлено
Aqui funcionou perfeitamente, cara, dá uma olhada их Комо você está fazendo busca; tenta executar алгоритм Комо: Гера (X). , e vai pressionando ; pra ver рот resultados. Это хорошо работало здесь; попытайтесь управлять вопросом как Гера (X). , и пресса ; , чтобы получить каждый результат.
добавлено автор Rubens, источник
Você nã o postou nada отрезвляют mé todo solucao (S) aqui, cara, fica difí cil ajudar assim. Вы не отправили никакой solucao (S) метод, таким образом, there' s никакой путь к не, что происходит.
добавлено автор Rubens, источник
Эй, Рубенс, я сделал вас, сказал, но don´ t решенный.
добавлено автор Rodrigo, источник
Сим, quando executo o Гера (X) funciona, mas qdo executo o mé todo solucao (S) ставки aparece o que disse.
добавлено автор Rodrigo, источник
Агора Postei! xD
добавлено автор Rodrigo, источник

У вас есть опечатка в вашем коде. Вы помещаете двоеточие, где вы имели в виду запятую:

Линия

member(Tema, [transito, culinaria, reciclagem]);

должен читать

member(Tema, [transito, culinaria, reciclagem]),
0
добавлено