Prolog中八进制到二进制数的转换



这就是我试图将八进制数转换为二进制数的方法。我想做的是找到给定八进制数除以10的余数,得到每个数字,并将该数字转换为3位二进制。但这段代码没有产生任何输出。请帮忙。提前谢谢。

convert_bin(0, '0').
convert_bin(1, '1').
convert_bin(N, B) :-
    N > 1,
    X is N mod 2,
    Y is N // 2,
    convert_bin(Y, B1),
    atom_concat(B1, X, B).
convert_oct(N, O) :-
    X is N mod 10,
    convert_bin(X, B),
    Y is N // 10,
    convert_oct(Y, O1),
    atom_concat(O1, B, O).

编码的数字最好是数字列表,而不是原子!

使用clpfd和n_base_digits/3,我们可以编写以下示例查询:

?-use_module(库(clpfd))。是的。?-n_base_digits(27,2,二进制)。二进制=[1,1,0,1,1]。?-n_base_digits(n,2,[1,1,0,0,1,0,1])。N=201;false。?-n_base_digits(n,2,[1,1,0,0,1,0,1]),n_base_digits(n,8,八进制)。N=201,八进制=[3,1];false。

最新更新