2016-11-23 1 views
0

나는 단지 Polog를 배우기 시작했고, 다음과 같은 일을해야만한다. : 나는 술어를 써야한다. 목록 A는 B가 가지고있는 요소 중 일부만 포함합니다. (A = [a, b] B = [a, b, c]가 참일 때), 나는 그렇게했다. 그러나 두리스트의 동등한 요소가 같은 수인지를 결정해야한다.Prolog에서 두리스트를 비교하여 두리스트의 같음 원소가 같은 수인 지 확인하기

Example: 
A = [b,b,c,c]  (b and c is member of B so its true) 
B = [a,b,b,c,c,d,f,g] 
<--would be true 

나는 첫 번째 부분을 작성했지만 아직 조사해야합니다. [ 교사가 선택하여 제안하지만

초 선택 사항입니다 : 목록 C는 일부 포함 된 경우 내가 확인 술어 다른 표현을 추가해야 하지만 나는 그것을 확인하고 번호를 정렬 사용할 수 없습니다 B가 가지고있는 요소 (이전 작업과 동일). (이미 완료되었으므로) C의 요소가 C에서 두 번 표시되는지 확인해야합니다.

Example: 
A = [b,b,c,c] 
B = [a,b,b,c,c,d,e,f,g] 
C = [b,b,b,b,c,c,c,c] /or/ C=[a,a,b,b,b,b] 
would be true. 
(C = [a, b] B = [a, b, c]

EDIT1 : 그리고 지금까지 작성한 코드는 다음과 같습니다

은 첫 번째는 그들이에 나타나는 B에있는 모든 요소를 ​​제거하고 남은 것을 반환하여 수행 할 수 있습니다
subset([ ],_). 
subset([H|T],List) :-  
    member(H,List),  
    subset(T,List).  



p(A,B,C) :-     %this is the predicate in which I have to 
    subset(A,B),    %compile everything together 
    subset(C,B).  
+0

이미 작성한 코드를 게시 할 수 있습니까? – Rodolfo

답변

0

, 우리는 확인 나머지는 A에있는 요소를 포함하지 않습니다 (IE는 같은 수입니다).

dontIntersect(L1,L2) :- 
    intersection(L1,L2,[]). 

subset_2([], R, R). 

subset_2([H | T], List, R):- 
    select(H, List, NewList), 
    subset_2(T, NewList, R). 

subset(L1, L2):- 
    subset_2(L1,L2,Remainder), 
    dontIntersect(L1,Remainder). 

두 번째 요소는 목록에서 두 개의 요소를 한 번에 제거한다는 점을 제외하면 매우 유사합니다.

dontIntersect(L1,L2) :- 
    intersection(L1,L2,[]). 

subset_2([], R, R). 

subset_2([H | T], List, R):- 
    select(H, List, NewList1), 
    select(H, NewList1, NewList2), 
    subset_2(T, NewList2, R). 

subset(L1, L2):- 
    subset_2(L1,L2,Remainder), 
    dontIntersect(L1,Remainder). 
+0

감사합니다. Rodolfo! 이것이 바로이 문제를 해결할 수있는 상상 이었지만 아직 코드에 넣을 수는 없습니다. 나는 당신의 의견을 upvoted했지만 그것이 15 명성에 도달했을 때만 나타납니다 :]하지만 코드의 두 번째 부분에 문제가 생겼어. 아팠어. 편집에서 설명하려고 애썼다. – Pavels

+0

'[추적] 69? - subset3x ([a, b], [a, a, b, b, c]). ... 끝내기 : (10) select ([], [b, c], [b, c])? 크리프 ** .. 전화 : (9) 목록 : intersection ([a, b], [b, c], [])? 크립 ** 실패 : (9) 목록 : 교차점 ([a, b], [b, c], [])? ** ' 나는 그 단계에서 빈 목록을 가져 와서 일부 기호가 미리 알림에 걸리게됩니다. 현재이 문제를 해결하는 방법을 생각하고있는 Im : D – Pavels

+0

NEVERMIND, 죄송합니다. 모두 작동합니다. 코드를 통합 할 때 실수로 작성했습니다. 어쨌든, 많은 분께 고마워요.] – Pavels