簡體   English   中英

序言:編寫現有列表的每個元素

[英]Prolog: Writing each element of an existing list

我正在嘗試做兩件事。 (1)顯示現有列表的每個元素,以及(2)搜索列表以顯示包含該元素的所有名稱。

以下是一些事實:

 classes(hannes, [cs490, cs499, cs413]).   % name has this list of classes
 classes(tony, [ma330, ma211, ma250]).
 classes(nicholas, [cs424, cs570, ma330]).
 classes(pj, [ma211, ma250, ma285, cs424]).
 classes(inga, [cs285, cs307, cs309]).
 classes(christine, [ma285, ma211, ma330]).
 classes(lisa, [cs424, cs413, cs490]).
 classes(marty, [cs570, cs424]).

到目前為止,這是我的規則:

 taking(N,C) :-               % student Name N is taking class C
      classes(N,Cs),
      [C|T] = Cs.

目前,我知道這只是列表的頭並顯示它。 我需要顯示列表的每個項目(如果足夠容易的話,一次只顯示一行,但並不重要)。 但是,我還需要能夠做到相反。 如果查詢了1門課程(ma330),我希望它顯示所有具有該特定課程的學生。

查詢示例1:

?- taking(nicholas, Classes).
Classes = [cs424, cs570, ma330] ;

要么

?- taking(nicholas, Classes).
Classes = cs424 ;
Classes = cs570 ;
Classes = ma330 ;

查詢示例2:

?- taking(Names, ma330).
Names = tony ;
Names = nicholas ;
Names = christine ;

我將繼續尋找解決方案,但是如果有人可以提供幫助,我們將不勝感激。

謝謝!!!

想到:C是Classes的成員。

編輯確定,請嘗試以下代碼:

taking(N,C) :-               % student Name N is taking class C
      classes(N,Cs),
      member(C, Cs).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM