我正在尝试打印一个多项式方程,给出Prolog中的术语列表。 例如,多项式([指数(3,4),指数(10,3)])应打印出3X ^ 4 + 10X ^ 3。我写了下面的代码,我编码打印的方式' +'在最后一个学期之后。如果我打印' +'在下一学期之前,它打印' +'在第一个学期之前。我如何检查此案例?
printExponent(exponent(X1,X2)):-
write(X1),
X2 > 0,
write('X^'),
write(X2),
write('').
polynomial([]).
polynomial([H|R]):-
printExponent(H),
polynomial(R).
答案 0 :(得分:1)
作为递归的基本情况处理1个元素的列表,而不是空元素,因此您可以在调用递归规则之前打印加号
polynomial([H]) :-
printExponent(H).
polynomial([H|R]):-
printExponent(H),
write(+),
polynomial(R).
编辑一个高级替代方案,就是使用DCG来关联单项式列表及其表示:
:- use_module(library(dcg_util)).
polynomial(L, Cs) :-
phrase(list(mono, plus, L), Cs).
mono(exponent(X1,X2)) --> {format(codes(Cs), '~w * X^~w', [X1,X2])}, Cs.
plus --> " + ".
示例:
?- polynomial([exponent(2,3),exponent(5,6)],Cs),atom_codes(A,Cs).
Cs = [50, 32, 42, 32, 88, 94, 51, 32, 43|...],
A = '2 * X^3 + 5 * X^6'
我使用了M.Hendricks的方便包dcg_util,这是对“二阶”DCG的一个很好的介绍(即将非终端作为参数传递)。