2011-02-28 49 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). 

前兩行按預期工作。問題在最後一個地方。我想在列表L上添加C,但是我得到的是「錯誤:超出全局堆棧」。我正在使用SWI-prolog。

如果需要我可以發佈剩餘的代碼。在此先感謝您的時間和精力:)

回答

2

難道您不使用findall來組裝清單嗎? stackoverflow的原因可能是追加(L,C,L),因爲L永遠不會統一到此子句中的任何內容。

+0

appead用於追加列表 - append(L,C,L)意味着:我想要添加C到列表的所有解決方案都保持不變。 – codecraft 2011-02-28 17:14:18

+0

是的,你可能想要閱讀列表結構,它是prolog的基礎,你不需要像append或findall這樣的函數來實現它。 – codecraft 2011-02-28 17:21:29

+0

如果這是一項家庭作業,你應該添加作業標籤:) – codecraft 2011-02-28 17:22:18