我有这段代码将整数转换为罗马数字
我需要添加一个将整数与罗马数字输入进行比较的函数,并显示它是否为try或false,例如:
罗马(v,5)。
真的

toroman(0).
toroman(N) :- N < 4, put("I"), M is N - 1, toroman(M).
toroman(N) :- N = 4, put("I"), put("V").
toroman(N) :- N = 5, put("V").
toroman(N) :- N < 9, put("V"), M is N - 5, toroman(M).
toroman(N) :- N = 9, put("I"), put("X").
toroman(N) :- N < 40, put("X"), M is N - 10, toroman(M).
toroman(N) :- N < 50, put("X"), put("L"), M is N - 40, toroman(M).
toroman(N) :- N < 90, put("L"), M is N - 50, toroman(M).
toroman(N) :- N < 100, put("X"), put("C"), M is N - 90, toroman(M).
toroman(N) :- N < 400, put("C"), M is N - 100, toroman(M).
toroman(N) :- N < 500, put("C"), put("D"), M is N - 400, toroman(M).
toroman(N) :- N < 900, put("D"), put("D"), M is N - 500, toroman(M).
toroman(N) :- N < 1000, put("C"), put("M"), M is N - 900, toroman(M).
toroman(N) :- N < 4000, put("M"), M is N - 1000, toroman(M).



roman(N) :- toroman(N).

最佳答案

尝试用不同的方式表述问题:编写语法(dcg)来关联一个整数和一个表示罗马数字的字符列表。这是一个开始:

:-use_module(library(clpfd))。

罗马(0)->“”。
罗马(N0)->“I”,{1#=
您可以这样使用它:

?-短语(roman(3),L)。
L =“III”;
错误的。

或者

?-短语(罗马(N),“II”)。
N = 2;
错误的。

或者,如果您不知道要问什么,只需提出最普遍的问题:

?-短语(roman(N),L)。
N = 0,
L = [];
N = 1
L =“I”;
N = 2
L =“II”;
N = 3,
L =“III”;
错误的。

要像L = "III"一样紧凑地获取答案,请使用:- set_prolog_flag(double_quotes,chars).。有关更多信息,请参见this answer

关于numbers - 序言将数字转换为罗马数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13269694/

10-13 02:58