我建立了一个谓词,它将罗马数字转换为阿拉伯数字。唯一的问题是谓词是有限的:如果我想一次转换超过 3 个阿拉伯数字,它就不再起作用了。
这就是谓词应该如何工作:
?- convert([v,i,i],Arabic).
Arabic = 7.
到目前为止我的解决方案:
tran([],0).
tran(i,1).
tran(v,5).
tran(x,10).
convert([],X) :- X is 0, !.
convert([T],X) :- tran(T,E), X is E,!.
convert([T|Ts],X) :- tran(T,E), tran(Ts,Es), X is E+Es,!.
convert([T,Ts,Tss],X) :- tran(T,E), tran(Ts,Es), tran(Tss,Ess), X is E+Es+Ess.
我知道为什么谓词不能使用超过 3 个数字,我也可以扩展转换谓词,但使用与上图相同的模式。
如何使转换谓词更“通用”(以便它可以独立于数字数量工作)?或者您有其他想法如何编写谓词?谢谢 :)