2013-04-23 4 views
1

프롤로그에서 목록을 조작하는 방법을 알고 있지만 목록 목록에 문제가 있습니다. 시험을 위해 공부하고 있는데 이것은 연습 문제 중 하나입니다. 누군가가 나를 도와 줄 수 있습니까? 지금까지 내가 시도한 모든 시도는 완전한 실패였다.프롤로그의 목록 목록?

값 목록을 매개 변수로 사용하여 목록의 모든 값의 최대 값을 반환하는 max2D라는 술어를 작성합니다.

예 출력 : 57

?- max2D([[1,-7,3],[2,10],[19,3],[12]],M). 
M = 19 . 
+0

는, 아무것도 작동하는 것 같다없는 각 최대의 최대 값은 전체 최대있을 것입니다. 나는 'member'라는 함수에 내장 된 함수를 사용해 보았습니다. –

+0

"목록의 모든 값의 최대 값"이라고 말하면 단일 값, 모든 목록의 모든 값 중 최대 값 ** 또는 ** 값 목록이 필요한지 여부는 불분명합니다. 각 목록의 최대 값. 이것은 코드가 무엇을해야하는지뿐만 아니라 시도한 코드를 포함시키는 것이 도움이되는 또 다른 이유입니다. –

+0

다음은 출력 예입니다. 57? - max2D ([[1, -7,3], [2,10], [19,3], [12]], M). M = 19. 그렇습니다. 목록의 전체 목록 중에서 최대 값 인 단일 값만 원합니다. –

답변

0

의 두 단계를하자. 첫째, 목록의 최대하자 :

maxlist([X,Y|Z], Max) :- 
    X > Y -> maxlist([X|Z], Max) 
      ; maxlist([Y|Z], Max). 
maxlist([X], X). 

좋아 보인다 :

?- maxlist([1,5,7,3,5], Max). 
Max = 7.  

이의는 2 개 차원 목록에 그것을 적용 할 maplist/3을 사용하자. 이 작업을 표시

max2D(List, Max) :- 
    maplist(maxlist, List, EachMax), 
    max_list(EachMax, Max). 

: 나는 많은 변화를 시도

?- max2D([[1,-7,3],[2,10],[19,3],[12]], X). 
X = 19 ; 
false. 
+0

당신이 엄청난 도움을 주었고, 매플리스트가 존재한다는 것을 몰랐다면, 내 인생을 훨씬 쉽게 만들었을 것입니다. :) –

+0

@ user2303093 아무런 문제없이 의견을 보내 주셔서 감사합니다. :) Prolog와 시험에 행운을 빈다. –