如何从pl中删除项目。使用retract文件

时间:2013-12-11 01:30:51

标签: prolog

retract(byCar(auckland,hamilton)).
retract(byCar(hamilton,raglan)).
retract(byCar(valmont,saarbruecken)).
retract(byCar(valmont,metz)).
retract(byTrain(metz,frankfurt)).
retract(byTrain(saarbruecken,frankfurt)).
retract(byTrain(metz,paris)).
retract(byTrain(saarbruecken,paris)).
retract(byPlane(frankfurt,bangkok)).
retract(byPlane(frankfurt,singapore)).
retract(byPlane(paris,losAngeles)).
retract(byPlane(bangkok,auckland)).
retract(byPlane(losAngeles,auckland)).

我用pl文件中的项目键入了上述内容。 但是prolog显示谓词受到保护。 发生了什么事?

1 个答案:

答案 0 :(得分:1)

您正在尝试使用动态谓词。要使用它们,您需要将它们声明为动态:

:- dynamic(byCar/2).
:- dynamic(byTrain/2).
:- dynamic(byPlane/2).

然后撤回,如果您愿意,可以整体,或者单独进行:

retract(byCar(auckland,hamilton)).
retract(byCar(hamilton,raglan)).
retract(byCar(valmont,saarbruecken)).
retract(byCar(valmont,metz)).

或者撤消所有byCar条款:

retract(byCar(_,_)).

例如,您也可以撤消valmont

中的内容
retract(byCar(valmont,_)).

请注意,这只会从内存中撤回事实,并且不会将其从原始文件中删除。要从文件中删除,您必须在撤消要排除的事实后重写该文件。请参阅谓词,例如telling/1tell/1told/0(适用于爱丁堡式I / O)。