我想每次用戶請求另一個值時返回列表的第一個元素,即List = [1, 2, 3]
,當程序執行時它返回1
,但是,當按下;
(用戶請求另一個值值),則返回2
等等,直到列表爲空。返回列表遞歸序言
儘管我已經設法一次列出所有值,但這裏的關鍵問題是,我該如何等待並讓用戶決定他是否想要另一個值。
我想每次用戶請求另一個值時返回列表的第一個元素,即List = [1, 2, 3]
,當程序執行時它返回1
,但是,當按下;
(用戶請求另一個值值),則返回2
等等,直到列表爲空。返回列表遞歸序言
儘管我已經設法一次列出所有值,但這裏的關鍵問題是,我該如何等待並讓用戶決定他是否想要另一個值。
只是這樣做:
member(X, List).
這將枚舉的List
的下一個成員每個;
。對謂詞的每次調用都會在X
中實例化List
的下一個成員,直到所有成員都耗盡。
是的,有一個內置函數可以做到這一點,但我認爲您應該嘗試自己寫它來更好地理解Prolog。
each_one([A|_],A).
列表中的一個元素是它的頭元素。
each_one([_|B],X):- each_one(B,X).
更多元素在列表尾部。這是遞歸子句。
空列表中沒有元素,所以我們不寫任何東西(儘管我們可以用each_one([],_):- fail.
寫同樣的效果)。
現在,你可以嘗試一下:
4 ?- each_one([1,2,3],X).
X = 1
序言說明你的第一個解決方案,並等待您的答覆。您按';'繼續:
;
X = 2 ;
X = 3 ;
false.