Prolog 编写谓词以将浮点转换为数字列表
我需要写一个谓词,它接受一个浮点数并返回一个数字列表。例如:Prolog 编写谓词以将浮点转换为数字列表,prolog,Prolog,我需要写一个谓词,它接受一个浮点数并返回一个数字列表。例如: ?- solA(0.1234, [], B). B = [1,2,3,4] 这是我的代码: addhead(X, L, [X|L]). solA(0.0, _, _). solA(A, B, H) :- C is A*10, D is float_integer_part(C), E is round(D), F is C-E, addhead(E, B, G),
?- solA(0.1234, [], B).
B = [1,2,3,4]
这是我的代码:
addhead(X, L, [X|L]).
solA(0.0, _, _).
solA(A, B, H) :-
C is A*10,
D is float_integer_part(C),
E is round(D),
F is C-E,
addhead(E, B, G),
solA(F, G, H).
这就是我解决问题的方法:
digits_of( Number , Digits ) :-
number_codes( Number , Codes ) ,
findall( Digit , ( member(Code,Codes) , digit(Code,Digit) ) ,Digits )
.
digit(Code,Digit) :-
code_type(Code,digit) ,
Digit is Code - 48 , % 48 is code point for ASCII/Unicode zero ('0')
.
因为处理浮点抖动让我头疼。您可能需要
solA(0.0,G,G)。
作为基本情况solA(0.0,,,)。
不将
实例视为同一变量。它们被视为两个不同的匿名变量。这可能不是你唯一的问题,但它是一个重要的问题。你也可以去掉addhead(E,B,G)
,将solA(F,G,H)
中的G
替换为solA(F,[E | B],H)
。除硬编码外,零码位的另一种选择是使用数字为code-0'0
。您还可以通过使用code>=0'0,code=<0'9
而不是专有谓词code\u type/2
来提高代码的可移植性。