合并句的分拆;并列句的合并
2011-04-17 01:10:43
上篇说到目前的工作还不适于引入这样的表达方式。 但现在改主意了,加入下面的代码,就可以实现合并句的分拆,看起来也够简单清晰,因此,这个工作可以加入to-do-list了。 separate(A,Ax):-A \= (_-_), is_list(A),member(Ax,A). separate(A,Ax):-A \= (_-_), not(is_list(A)),A=Ax. separate(A-B,Ax-Bx):-is_list(A),member(Ax,A),separate(B,Bx). separate(A-B,Ax-Bx):-not(is_list(A)),Ax=A,separate(B,Bx). %是变成[a1-b,a2-b]还是变成a1-b,a2-b?变成列表似乎更好处理些,后面再看。 %Term是合并句式 对有变量的列表处理有问题,继续做。 def combined-Term:-is_list(Term),!. def combined-Term:-Term==(A-B), def combined-A, !. def combined-Term:-Term==(A-B), def combined-B, !. %这个是专门对合并句式起作用的规则 do Term:- def combined-Term, separate(Term,Term1), do Term1. 仅仅是加上这样一点通用的代码,在程序中就可以实现各种合并句的分拆功能,比如同时关闭w1,w2窗口,就可以这样写: do close-[w1,w2]. 前提仅仅是定义了这样的关闭单个窗口的代码: do close-W :- ... ... 而且,对于几乎所有的谓词都可以直接如此使用,列表可以出现在任意的位置。 这样能够让代码变得更加简洁,易于理解。 这个工作还要持续几天,让它变成一个足够通用,足够灵活的基础代码,同时又不会和其他表达方式出现混淆的情况。