0
그래서 프롤로그이 코드 조각이 :결과가 정확하지
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"(쓸 때, 그것은하지만, 정확한 값을 가지고 있다는 것입니다 다음과 같이 호출하면 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)).
감사합니다.
emFrente는 어디서 오는가? – m09
이것은 ant에 주문을 생성하는 알고리즘으로되어 있습니다. 그 명령은 개미가 모든 음식을 흔적에 고르도록하기위한 올바른 행동입니다. 함수의 일부만 포함 시켰지만 아이디어를 얻었습니다. 그건 그렇고, "emFrente"는 내 언어로 "곧장 앞으로"라는 뜻입니다. –
당신의 문제에 대한 해답이 없지만 movex (o, Y, R)와 같은 구문을 사용하여 movex와 movey 술어를 간소화 할 수 있습니다. - R은 Y -1입니다. 등등 ... my_avalia 술어도 마찬가지입니다. – m09