Tag Archives: Scistus

在SICStus中,是不能直接使用append这个谓词的,虽然在Amzi和SWI Prolog中这个都作为内建谓词,但是SICStus中,使用append需要先加载lists包。

原话是这样的:

This package defines operations on lists. Lists are a very basic data structure, but nevertheless certain very frequent operations are provided in this package.

这个package定义了列表的操作符,列表时一个非常基本的数据类型,不过一些非常常用的操作符在这个package中提供。

需要加载这个包,输入use_module(library(lists)).
这样就可以使用append/3、delete/3、is_list/1、last/2、max_list/2等有关列表的谓词了。

clip_image001

参考资料:

The Prolog Dictionary: http://www.cse.unsw.edu.au/~billw/prologdict.html
SICStus User’s Manual: http://www.sics.se/sicstus/docs/latest4/html/sicstus.html/ Read More →

教程中的例子使用的是Amzi来编译。我用的则是SICStus,但是在试验本节中的语句时出现了“Permission error: cannot retract static user:here/1”的问题,修改解释器的Language为SICStus或ISO均出现此问题,觉得应该是解释器不同造成的差异,于是在Amzi下试验,发现运行正常,后经在网上查找资料,发现SICStus中Consult后的谓词语句都是静态的,如果想对其进行动态的修改,需要用dynamic修改原文件。

比如在本例中,需要在:

here(kitchen).

前增加如下语句:

:- dynamic here/1.

即(见图1):

:- dynamic here/1.
here(kitchen).

这样在SICStus就可以成功执行goto/1了(见图2)。

clip_image001

图1 pro文件

clip_image002

图2 运行效果

Read More →