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显示谓词受到保护。 发生了什么事?
答案 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/1
,tell/1
和told/0
(适用于爱丁堡式I / O)。