2014-12-07 6 views
0

목록의 모든 항목을 합산하는 조건부를 작성해야합니다. 항목은 목록에있는 목록 일 수 있습니다. 예 : sum1 ([1, [2,3], 4, [5]], X). 나는 작동해야하는 코드를 가지고 있지만 인수를 제공 할 때 충분히 인스턴스화되지 않은 오류가 있습니다. 나는 프롤로그에 새로 왔지만 이것들은 나에게 잘 보였다. 여기에이 술어 (기능)에 대한 내 전체 코드프롤로그 합계 던지기 오류

suml([],0). 
suml([H|T],X) :- atomic(H),S2 is H + X, suml(T,S2). 
suml([H|T],X) :- suml(H,S1), S3 is S1 + X, suml(T,S3). 

답변

0

변경 다음 두 가지 조건의 순서입니다 : S2 is H + X, suml(T,S2)하고 is/2를 사용하는 방법을 변경합니다. 이것이 논리 프로그래밍이지만 규칙의 조건 순서가 중요합니다. 합계를 계산하기 전에 S2이 인스턴스화되어야하므로 먼저 sum1(T, S2)을 입력하십시오. 둘째, is은 오른쪽 부분을 산술적으로 평가하고 왼쪽 부분과 통합합니다. 그래서, 당신은 실제로 S2HX를 얻을 수 합계를 :

suml([H|T],X) :- atomic(H), suml(T,S2), X is H + S2. 
+0

당신을 다시 감사합니다! 이 두 번째 줄을 시도했지만 작동하지 않습니다. suml ([H | T], X) : - suml (T, X), suml (H, S1), S1 + X. 기본적으로 이것은 목록이있는 경우입니다. 또한 합쳐서 추가하십시오. 하지만 이것은 작동하지 않고 메신저 gettin 정의되지 않은 절차 –

+0

nvm! 나는 잘못했다, 나는 강사가 예를 어떻게 가지고 있었기 때문에 X의 코드에 혼란 스러웠다. 나는 그것을 얻었고, 그것은 suml ([H | T], X)이어야한다 : - suml (T , S1), suml (H, S2), X는 S1 + S2이다. –