2017-12-16 17 views
2

나는 프롤로그에 절을 써서 목록을 가져 와서 가장자리의 술어를 반환하려고합니다. 예 :프롤로그의 튜플에 나열

?- listpairs([1, 2, 3], X, Y). 
X = 1 
Y = 2; 

X = 2 
Y = 3; 

이것은 내가 지금까지 시도했지만 어디에도 없었습니다.

listpairs([H], H, H). 
listpairs([H1,H2|T], X, Y) :- 
     X is H1, 
     Y is H2, 
     listpairs([H2|T], X, Y). 

누군가 도와 주시면 감사하겠습니다.

+0

베이스의 경우는 의미가 있습니까? 너가 원하는게 그거야? 재귀 적 경우에는 분리를 추가해야합니다. 값을 반환하거나 재귀 적으로 호출해야하며 둘 다 호출해서는 안됩니다. –

+1

* ... 아무데도 못 가고있어 *. 아주 좋은 문제 설명이 아닙니다. – lurker

답변

2

문제는 쓰기가 있다는 것입니다 :

X, Y가 값이 술어는 박람회 당신이하려고합니다 재귀의 다음 반복에 있기 때문에 더 그렇게 변경할 수 있음을 의미 인스턴스화 다시 인스턴스화 X, Y.

시도 :

listpairs([H1,H2], H1, H2). 
listpairs([H1,H2,_|_], H1, H2). 
listpairs([_,H2|T], X, Y) :- listpairs([H2|T], X, Y). 

예 :

?- listpairs([1, 2, 3, 4, 5], X, Y). 
X = 1, 
Y = 2 ; 
X = 2, 
Y = 3 ; 
X = 3, 
Y = 4 ; 
X = 4, 
Y = 5 ; 
false. 
+0

그것은 일했다! 정말 고맙습니다! – user287474

+0

두 번 똑같은 대답을하기 전에 답을 수정하고 수정 해 주셔서 대단히 기쁩니다. – coder

+0

산술 표현식을 평가하지 않을 때'is/2'를 사용하지 마십시오. 할당을 위해서는 통일을 사용하십시오 :'=/2'. listpairs ([H1, H2, _ | _], X, Y) : - listpairs ([H1, H2, _ | _], X, Y) X = X1, Y = H2이다. – coder