Результат в аргументе не верен - PullRequest
0 голосов
/ 30 ноября 2011

Итак, у меня есть этот кусок кода пролога:

my_avalia(A, R) :-
    A == "Koza" -> koza(R, 0, 0, e, 89).

koza(R, _, _, _, 87) :-
    !,
    write(R).

koza(R, X, Y, V, C) :-
    movex(V, X, X1),
    movey(V, Y, Y1),
    confirma(X1, Y1, Z),
    Z == 1 -> (append(R, [emFrente], U),
            L is (C - 1),
            koza(U, X1, Y1, V, L)).

Дело в том, что когда я пишу "R" в koza (), он имеет правильные значения, однако он заканчивается пустымукажите в my_avalia, когда я называю это так:

my_avalia ("Koza", R).

Моя рекурсия может быть неправильной, но я не знаю, что с ней не так.Заранее спасибо.

Другие функции:

movex(X,Y,R):-(X==o)->(R is Y-1).
movex(X,Y,R):-(X==n)->(R is Y).
movex(X,Y,R):-(X==s)->(R is Y).
movex(X,Y,R):-(X==e)->(R is Y+1).

movey(X,Y,R):-(X==n)->(R is Y-1).
movey(X,Y,R):-(X==s)->(R is Y+1).
movey(X,Y,R):-(X==o)->(R is Y).
movey(X,Y,R):-(X==e)->(R is Y).

confirma(X,Y,R):-(santafe(X,Y),R is 1); (R is 0).

Я понял это .. Такая глупая ошибка.

koza([], _, _, _, 87) :-!.
koza(R, X, Y, V, C) :-
    movex(V, X, X1),
    movey(V, Y, Y1),
    confirma(X1, Y1, Z),
    Z == 1 -> (L is (C - 1),
            koza(U, X1, Y1, V, L),
            append(U, [emFrente], R)).

Спасибо в любом случае.

1 Ответ

0 голосов
/ 29 января 2016
koza([], _, _, _, 87) :-!.
koza(R, X, Y, V, C) :-
    movex(V, X, X1),
    movey(V, Y, Y1),
    confirma(X1, Y1, Z),
    Z == 1 -> (L is (C - 1),
            koza(U, X1, Y1, V, L),
            append(U, [emFrente], R)).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...