2013-12-13 5 views
0

다음 목록이 있습니다 : [[1,1,3],[1,2,7],[1,3,9],[2,1,2],[2,2,7],[3,1,4]]. 나는 목록의 각 요소의 처음 두 요소에만 관심이있다. 제대로하기 위해 구성 요소가 누락되었음을 알고 있습니다 (예 : [2,3,2]). 목록에서 (b, c) b의 최대 값을 결정할 수 있습니다. 누락 된 요소를 올바른 위치에 삽입하고 싶습니다.목록에 누락 된 요소를 삽입하십시오.

work_list([],_,_,_). 
work_list([[A,B,_]|F],Alast,Blast,Max):- 
A==Alast, work_list(F,A,B,M). 
work_list([[A,B,_]|F],Alast,Blast,Max):- 
A>Alast, Blast<Max, work_list_miss(F,Alast,Blast,Max). 

work_list_miss(F,Alast,Blast,Max):- 
    Blast<Max, Blast1 is Blast+1, add_list([Alast,Blast,1],F,FNew). 
work_list_miss(F,Alast,Blast,Max):- 
    Blast=Max, Blast1, add_list([Alast,Blast,1],F,FNew), worklist(F,Alast,Blast,Max). 

add_list(A,B,[A|B]). 

그것은 작동하지 않습니다

나는 시작했다. 누구든지 도움을 줄 수 있습니까? 목록에 표시 할 때 : [[1,1,3],[1,2,7],[1,3,9],[2,1,2],[2,2,7],[2,3,1],[3,1,4]] 감사!

+0

무엇 선언문 호출하면 어떻게해야합니까 비교하고 무엇에 집중하자 "작동하지 않는다"는 뜻입니까? – lurker

+0

당신은 싱글 톤과 정의되지 않은 콜을 제거한 코드를 수정하고 다시 시도 할 수 있습니다 ... – CapelliC

+0

나는 내가 보여주는리스트 결과를 얻지 못한다는 것을 의미합니다. – user3038679

답변

0

코드에 많은 수정과 디버깅이 필요합니다. 동작을 얻기 위해 비 결정 성을 사용하는 대신 고려 : 여기 목록 I에 전자를 삽입 술어가 목록 분할을 처리하고

insert_between(E, I, O) :- 
    append(X, [Y,Z|T], I), 
    Y =< E, E < Z -> append(X, [Y,E,Z|T], O). 
+0

나는 초심자이므로 프롤로그를 이해하는 데 몇 가지 문제가 여전히 있습니다. 술어에서 O가하는 것은 무엇입니까? – user3038679

+1

기호 : E는 요소, O는 출력, I는 입력 - 제발 게으름 피우세요 ... – CapelliC

+0

죄송합니다. – user3038679

관련 문제