编写谓词以将浮点数转换为数字列表

时间:2014-05-27 21:12:38

标签: 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(F, G, H). 

1 个答案:

答案 0 :(得分:2)

这就是我解决问题的方法:

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')
  .

因为处理浮点抖动让我很头疼。