prolog实例_prolog实例

发布时间:2025-12-09 14:07:52 浏览次数:4

这是保存到文件的代码如下:

room(kitchen).room(office).room(hall). room('dining room').room(cellar). door(office, hall).door(kitchen, office).door(hall, 'dining room').door(kitchen, cellar).door('dining room', kitchen).location(desk, office).location(apple, kitchen). location(flashlight, desk). location('washing machine', cellar).location(nani, 'washing machine').location(broccoli, kitchen).location(crackers, kitchen).location(computer, office).edible(apple).edible(crackers).tastes_yucky(broccoli).here(kitchen). 

Jetbrains全家桶1年46,售后保障稳定

现在打开编辑器GNU-Prolog,打开文件可以直接询问机器:

房间里面有什么,通过;号隔开,我们可以看到机器会根据上面逻辑告诉你有什么。

| ?- room(X).X = kitchen ? ;X = office ? ;X = hall ? ;X = 'dining room' ? ;X = cellar(31 ms) yes| ?- 

接下来:在房间里面并且可以吃的有什么?

| ?- location(X,kitchen),edible(X).X = apple ? ;X = crackers ? ;no

逻辑告诉我们有:apple、crackers、no表示没有了。

现在输入trace.竟如debug模式,输入notrace退出。

| ?- trace.The debugger will first creep -- showing everything (trace)(15 ms) yes{trace}| ?- notrace.The debugger is switched offyes

在debug模式下输入上面语句我们可以看到,调试会有四个端口:Call、Fail、Redo、Exit。

{trace}| ?- location(X,kitchen),edible(X).      1    1  Call: location(_42,kitchen) ?       1    1  Exit: location(apple,kitchen) ?       2    1  Call: edible(apple) ?       2    1  Exit: edible(apple) ? X = apple ? ;      1    1  Redo: location(apple,kitchen) ?       1    1  Exit: location(broccoli,kitchen) ?       2    1  Call: edible(broccoli) ?       2    1  Fail: edible(broccoli) ?       1    1  Redo: location(broccoli,kitchen) ?       1    1  Exit: location(crackers,kitchen) ?       2    1  Call: edible(crackers) ?       2    1  Exit: edible(crackers) ? X = crackers ? ;      1    1  Redo: location(crackers,kitchen) ?       1    1  Fail: location(_42,kitchen) ? (31 ms) no

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477