2013-05-07 2 views
-1

정수 N, 정수 L 목록 및 기타 매개 변수를 사용하는 Prolog에서 관계 분할을 쓰려고합니다. 목록 L은 평평합니다. 목록 L이 세 개의 하위 집합으로 나눌 수 있으면 각 하위 집합의 정수 합이 N보다 작아지면 관계 분할은 true를 반환하고 그렇지 않으면 관계가 false를 반환합니다. 이것은 내가 지금까지 갔어요 멀리입니다 : Swi Prolog 관계

split(list, list, list, list) 
split([],[],[],[]). 
list_sum([],0). 
split([X|L], [X|L1], [X|L2], L3):- 
list_sum([Head + Tail]), 
list_sum>N, 
!, 
split(N, L,L1, L2, L3). 

- ERROR : 최상위 : 정의되지 않은 절차 : list_sum/2 (DWIM이 올바르지 목표 수) 어떤 도움과 설명이 높게 평가된다.

+2

실제 코드가 될 수 없습니다! – CapelliC

+0

더 가야합니다. –

+0

몇 가지 유용한 조언을 제공하십시오. 자신의 말로 해결 알고리즘을 적어서 시작하고이를 우리와 공유하십시오. –

답변

1

기본적으로 문제는 당신이 프롤로그를 배우러 가야한다는 것입니다. 농담이 아냐. 당신은 당신이이 수준의 "그것을 얻지 못해"빠져 나올 수 있다고 생각하면 수업에 실패 할 것이며, 나머지는 S.O.

  1. 그 첫 줄은 무엇입니까? 거기에 주석 문자를 넣으십시오.
  2. split/4 정의의 중간에 list_sum/2은 무엇이 있습니까?
  3. 차이 목록 또는 산술 연산을 생성하려고하지 않는 한 [Head + Tail]은 원하는 것을하지 않습니다.
  4. list_sum>N은 다음 줄에서 무엇을 의미할까요? Prolog에는 네임 스페이스가 하나만 있으며 대문자 사용 권한을 얻는 데 언어가 매우 의존합니다. 이 조잡한 것은 좋은 징조가 아닙니다.
  5. 7 번 줄을 자르는 이유는 무엇입니까?
  6. 이전 두 규칙 머리 (나는 생각하니?)가 split/4을 정의 할 때 마지막 줄은 split/5으로 정의됩니다. 이것은 당신이 의미하는 바가 아닐 수 있습니다.
  7. 4 행의 패턴 일치는 3 개의 목록이 모두 같은 값으로 시작해야한다는 것을 요구합니다. 목록의 요소를 유의미하게 검토 할 수있는 다른 특별한 존재가 없다는 것을 고려하면 꽤 특별한 경우 인 것처럼 보입니다.

제 생각에는이 코드는 전적으로 처리 할 수 ​​없습니다. 그것을 버리고 다시 시작하십시오. 그리고 먼저 튜토리얼을 읽으십시오.

1

귀하의 질문에 : 아니요은 표시된 "코드"에 두 개의 인수가있는 술어 list_sum을 정의했습니다. 이것이 오류가 말하는 것입니다.