prolog中的字符串到数字转换

时间:2014-11-03 08:09:13

标签: prolog swi-prolog

这是我的简单程序,我试图将原子转换为字符串。我使用了atom_number

代码 -

min(P1, P2) :-
    atom_number(P1, L1),
    atom_number(P2, L2)
    L1 > L2 ->
    (
        writeln('L2 id min'),
        writeln(L2)
    );
    L1 < L2 ->
    (
        writeln('L1 is mean'),
        writeln(L1)
    ).

当我执行文件时 -

swipl -s p1.pro
1 ?- min('12','13').
ERROR: </2: Arguments are not sufficiently instantiated

同样如果我想知道输入参数的数据类型怎么办?除了检查atom(L1), number(N2)之外?

1 个答案:

答案 0 :(得分:3)

问题在于你的if-then-else结构:atom-to-number转换只是第一个if-part的一部分。如果那个成功,你的谓词也会成功。例如:

?- ?- min('13','12').
L2 id min
12
true.

但是,如果第一个if部分失败,则评估第二个if部分。但这只包含不等式声明L1 < L2 而没有原子到数字的转换!

将转换置于if-then-else结构之前的解决方案:

min(P1, P2):-
  atom_number(P1, L1),
  atom_number(P2, L2),
  (   L1 > L2
  ->  writeln('L2 id min'),
      writeln(L2)
  ;   L1 < L2
  ->  writeln('L1 is mean'),
      writeln(L1)
  ).

现在你得到:

?- min('12','13').
L1 is mean
12
true.