2011-02-28 8 views
1

제가 만든 작은 프로그램에 문제가 있습니다. 아래는 문제가있는 부분입니다.프롤로그 및 목록 문제

failed(X, C, Y) :- 
     registered_for(
      student(id(X),_,_,_,_,_), 
      course(name(C),year(Y),_),absences(A)), 
     A>2. 

failed(X, C, Y) :- 
     grades(
      course(name(C),year(Y),_), 
      student(id(X),_,_,_,_,_),_,normal(G),_,_), 
     G<5. 

count_failed(X, C, Y, N) :- 
     failed(X, C, Y), 
     append(L, C, L), 
     length(_,L,N). 

처음 2 줄이 의도 한대로 작동합니다. 문제는 마지막 어딘가에 있습니다. 목록 L에 C를 추가하고 싶지만 "ERROR : Out of global stack"입니다. SWI-prolog를 사용하고 있습니다.

필요한 경우 나머지 코드를 게시 할 수 있습니다. 미리 시간과 노력에 감사드립니다 :)

답변

2

목록을 작성하는 데 findall을 사용하지 않습니까? L은이 절 내부의 항목에 통합되지 않으므로 stackoverflow의 이유는 아마도 append (L, C, L)입니다.

+0

또한 append는 목록을 추가하는 데 사용됩니다. - append (L, C, L)은 다음을 의미합니다. C에 목록을 추가하면 모든 변경 사항이 그대로 유지됩니다. – codecraft

+0

예, 목록 구성을 읽는 것이 좋을지도 모르며, 프롤로그를 작성하는 데 매우 기본적인 요소이며,이를 수행하기 위해 append 또는 findall과 같은 함수가 필요하지 않습니다. – codecraft

+0

숙제 인 경우 숙제 태그를 추가해야합니다 :) – codecraft