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