2012-11-19 136 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 是