我有一份包含以下声明的文本文件:
spare_time -< ~busy.
~busy -< ~working.
~working.
在我的程序序言中我定义了运算符:
:-op(1101,xfx,-<).
:-op(1101,xfx,<-).
:-op(190,fx,~).
我打算做的是读取文本文件并通过assertz / 1谓词语句,其形式为spare_time - &lt; [〜忙],即将规则体的元素转换为元素列表。读取文件并使用process / 1谓词时:
readFileSee(InputFile) :- seeing(OldStream),
see(InputFile),
repeat,
read(Term),
( Term == end_of_file -> ! ;
process(Term),fail
),nl,
write('archivo cargado sin errores'),
seen,
see(OldStream).
process(Head-<Body):-format(atom(A),"~w",Body),
atomic_list_concat(L,',',A),
assertz([Head,'-<'|L]),
write(Head),write(-<),write(L),nl,!.
process(Atom):-assert(Atom),write(Atom),nl,!.
现在,process / 1谓词显示以下内容:
?- readFileSee('programasPrueba/test.delp').
spare_time-<[~busy]
~busy-<[~working]
~working
archivo cargado sin errores
true.
所以我理解这些语句很好地插入。当我尝试定义以下谓词时出现问题:
argu(X):-[X,'-<'|Args], revC(Args),!.
argu(X):-X,!.
revC([H|B]):-[H,'-<'|Args],revC(Args), revC(B).
revC([H|[]]):-[H,'-<'|Args],revC(Args).
revC([H|B]):-H,revC(B).
revC([H|[]]):-H.
我在咨询争论(spare_time)时有这个问题:
?- argu(spare_time).
ERROR: revC/1: Undefined procedure: '~busy'/0
Exception: (11) '~busy' ?
然而,当我通过争论(〜忙)查询时,我有一个结果,所以我想我在文本文档中定义的规则的主体元素的内部表示有问题。对不起扩展名。