使用定义的运算符( - <)

时间:2017-05-26 18:29:15

标签: prolog operators

我有一份包含以下声明的文本文件:

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' ?

然而,当我通过争论(〜忙)查询时,我有一个结果,所以我想我在文本文档中定义的规则的主体元素的内部表示有问题。对不起扩展名。

0 个答案:

没有答案