2012-08-27 2 views
0

이것은 내가 지금 해결할 수없는 또 다른 프롤로그 작업입니다. predicat p (X, Y)를 써야합니다. 여기서 X는 숫자 목록이고 Y는 숫자 목록입니다. 프리디 캐은 다음을 확인해야합니다.프롤로그에서 연결 확인

1) X가 Y의의 2 개 요소 간 연결로 표시 될 수있는 경우 1) X에 홀수 개의 요소가 있음. 3) X의 모든 요소의 합이 Y의 마지막 요소입니다.

별개의 작업으로 2, 3을 쉽게 쓸 수 있습니다. 문제는 1)

감사합니다. 나는 쉬운 일을 게시하는 것에 대해 유감이지만 프롤로그는 정말로 나를 미치게 만든다. 나는 모든 나의 단서를 반복해서 읽었다. 하지만 상황은 다음과 비슷합니다. 학교 : 3 + x = 5, x =? 시험 : cos (x + y + z) + lim (5x + y)/t = .... 내가 무슨 뜻인지 안다면. 다시 한번 감사드립니다!

답변

2

연결 확인은 append/3으로 이루어지며,이를 빌드하는 데 더 많이 사용되지만 많은 Prolog 술어가 "반대 방향으로"작동합니다. 보다 구체적으로는 append(A,B,C)CAB의 연결인지 확인합니다. 그래서,

member(A, Y), 
member(B, Y), 
append(A, B, X) 

검사 Y의 요소 A과 연결이 X와 통합하도록 Y의 요소 B가 있는지.

(이 BY별개의 요소가 하지 체크 A 여부와 않습니다.)

+0

귀하의 빠른 응답 주셔서 감사합니다. 3)은 다음과 같이 보일 수 있습니다 : sumlast (X, Y) : - 합계 (X) = 마지막 (Y). sum이 X와 last (Y)의 모든 원소의 합을 찾으면 Y 축의 마지막 원소를 찾는다. 그리고 1)과 3)의 해답은 다음과 같다 : P (X, Y) : - member (A, Y), 멤버 (B, Y), (A, B, X), sumlast (X, Y). – bpavlov

+0

@borku :'sum (X) = last (X)'는 Prolog에서 항상 실패합니다. 함수 호출이 없습니다. 관계 적으로 생각하십시오. –

+0

저는 프롤로그, 스키마, asp.net, C++, PHP 등 주위의 모든 언어와 매우 혼동합니다. 저는 바보처럼 보임을 알고 있습니다. 그러나 저는 프롤로그와 그 사고 방식에있어 매우 큰 문제가 있습니다. – bpavlov