2011-04-18 48 views
1

我有以下爲什麼序言不打印此列表

schedule(mary,[ma424,ma387,eng301]). 

一個序言規則,我有一個謂語

taking(X,Y):- schedule(X, [Y | L]). 

,當我揣摩一下班她通過鍵入

taking(mary,Y). 

我越來越 Y = ma424

爲什麼沒有打印出她的所有類的

我也試過這和其他變化

taking(X,Y):- schedule(X,[X|L]),schedule(Y, [Y | L]),schedule(Y,L),X\=Y,X\=L. 

但它不工作

我怎麼得到它的打印所有的課給我的規則定義

回答

3

這是由於您定義的謂詞的方式的方式。

taking(X,Y) :-  % X takes class Y if... 
    schedule(X,  % in the schedule for X, 
      [Y|L]). % Y is the first element. 

你的程序將不會神奇地決定在列表L進行搜索,如果你不告訴它。要做到這一點,使用member/2斷言:

taking(Student, Class) :- 
    schedule(Student, Classes), 
    member(Class, Classes). 
+0

謝謝主席先生,它的工作精美:) ...你真棒....感激... – user682194 2011-04-18 13:01:23

+0

@ user682194:如果這個工作,然後單擊勾選在接受它的答案旁邊。 – 2011-04-18 13:02:43