목록에서 최대 값을 찾으려고합니다. 기본적으로 목록 앞의 요소와 요소 뒤에 오는 값보다 큰 값을 찾고 결과는 모든 로컬 최대 값의 목록이어야합니다.프롤로그 : 목록의 로컬 최대 값
예 : 그래서 쿼리 local_maximum([3,2,3,4,5,2,7,3,6,5], Answer)
당신이 목록 만 3 요소에 도달 할 때까지 재귀 호출을하고 계속 할
내 논리가 Answer=[5,7,6]
(5>4 , 5>2... 7>2, 7>3
이후 등등 ..)에 응답해야한다. 중간 요소가 왼쪽 요소와 오른쪽 요소보다 큰지 점검하고, 목록에 추가 할 것인지 확인합니다.
내 의도는 재귀 호출 트리를 사용하는 것입니다. 재귀 호출 트리의 두 번째 요소가 왼쪽 및 오른쪽 요소보다 큰지 항상 확인하고 싶습니다.
즉
1,3,5,2,1
|
3,5,2,1
|
5,2,1
BASE CASE
checks if 2 is greater than 5, and 1.... append nothing...
|
3,5,2,1
checks if 5 is greater than 3 and 2, append 5...
등 .. 내가 이것에 대해 이동하는 방법을 모른다
/*base case stop if it reaches 3 elements*/
local_maximum([X,Y,Z], Answer):- Y>X, Y>Z, Answer is Y.
local_maximum([X,Y,Z], []):- Y<X, Y<Z.
local_maximum([H|T], Answer):-
local_maximum(T, Answer), append([], Answer, Answer).
... 내 영어 죄송합니다. 안부,
해결되었습니다.
당신은 목록을 방문하면서 확인하고 맞는 단지 요소를 저장할 수 있습니다
local_maximum([X,Y,Z|Xs], [Y|Ms]) :-
Y>X, Y>Z,
local_maximum([Z|Xs], Ms).
다음 스킵와 기본 케이스 규칙을 추가합니다. 스킵 케이스를 쓰는 방법은 위의 규칙에 영향을 미치므로 여기서 잘라내야합니다. Prolog가 요청에 따라 대안을 검색 할 것이므로! 추가 컷은 '프로그램'의 가독성을 향상시킵니다.
귀하의 문제를 해결해 주셔서 감사합니다. 그러나 말하면서 당신은 당신의 질문을 지워 버렸습니다. 나는 다른 사람들에게 도움이 될 수 있도록 변화를 되돌릴 것입니다. –