2012-11-19 176 views
2

因此,我正在嘗試編寫一個執行以下操作的小程序。Prolog - 搜索元素列表,如果找到元素,則打印列表

我可以搜索列表中的元素,如果在列表中找到該元素,那麼該列表將被打印出來以確認它已被找到。

因此,在基本僞 -

  1. 元素的列表 - 電腦,鼠標,鍵盤,網絡攝像頭
  2. 搜索鼠標在此列表中
  3. 輸出列表中的鼠標已經
被發現

雖然做了一些閱讀,我發現了一些做我想做的事情。這是下面

on(Item,[Item|Rest]). 

on(Item,[DisregardHead|Tail]):- 
on(Item, Tail). 

如果鍵入查詢 - 上(蘋果,[梨,葡萄,香蕉,李子,蘋果])。 然後它通過列表搜索,放棄不相關的元素,直到它結束併成功。

我想要做的就是在編輯器中我自己的列表,並通過執行同一種功能,它像上面從它的工作。(而不是僅僅輸入列表,查詢到控制檯)。

感謝

+0

你能改善(編輯)你的問題澄清什麼是「在編輯器窗口中編寫的列表中執行此操作」? –

+0

已經完成了,基本上我發佈的代碼是在編輯器中編譯的唯一東西。所以我從控制檯運行的查詢是**(蘋果,[梨,葡萄,香蕉,李子,蘋果])**。而我想有一個預先編寫和編譯的列表來處理。 – Chris

回答

3

你可以在你的程序中定義

list_of_my_elements([pear, grape, banana, plum, apples]). 

in_my_list_of_elements(X) :- 
    list_of_my_elements(L), 
    member(X, L). 

然後查詢

?- in_my_list_of_elements(apple). 

我不會重新實現並重命名成員謂詞。

+0

感謝您的回答,它有很大的幫助。如果可以,我可以稍微延長這個問題。如果我想打印「在此列表中找到蘋果」或「在此列表中未找到蘋果」,該怎麼辦?我知道'寫'功能,但是如何像上面所說的那樣使用它? – Chris

+0

如果你不想在查詢中使用它,我會包裝成員函數。 member_print(X,L): - 成員(X,L),寫入(X),寫入('在列表中找到')。 – NotAUser

1

域 X =整數 升=整數*

謂詞 查找(L,X)

子句

find([],N) :- 
    write("There is no such element in the list"),nl. 

find([Element|List],1) :- 
    write("The element is ",Element),nl. 

find([Element|List],N) :- 
    N1 = N-1, 
    find(List,N1). 

輸出:

進球:找到([1 ,2,3,4],3) 元素是3 是

進球:找到([1,2,3,4],0) 有一個在列表中沒有這樣的元素 是

進球:找到([1,2,3,4],5 ) 有清單中沒有這樣的元素 是

目標:查找([1,2,4,3],4) 元素是3 是