简单的Prolog模式修补

时间:2010-11-10 20:00:46

标签: prolog

所以,如果我有类似[(a,b,c,d)]的东西,我希望删除()s(在整个列表中只有一组括号 - 紧跟在'['之后''之前')为什么我的规则:curly_for_square( [(C)], [C] ).不起作用?好像应该这样,但我确信这有一个简单的原因!!

2 个答案:

答案 0 :(得分:1)

我不完全确定[(a,b,c,d)]究竟是什么,但我怀疑它等同于[ ','(a, ','(b, ','(c, d))) ],使用中缀逗号运算符三次,因为没有仿函数接受这四个参数。

如果您绝对必须使用该语法,那么这样的内容可能有助于转换为普通列表:

decomma( List, [Head | TailOut] ) :- List = [','(Head,TailIn)], !,
    decomma( [TailIn], TailOut ).
decomma( [Term], [Term] ).

答案 1 :(得分:0)

在[a,b,c,...]和(...(((a,b),c)之间来回转换......)

flatten(X, H, T) :- var(X), !, H = [X|T].
flatten((A,B), H, T) :- !,
 flatten(A, H, X),
 flatten(B, X, T).
flatten(X, [X|T], T).

unflatten([X], X) :- !.
unflatten([A,B|Cs], F) :- unflatten([(A,B)|Cs], F).