0 prolog swi-prolog prolog-lists
convertBinToDec(B,D):- atom_number(S,B),
atom_length(S,L),
sub_atom(S, 0, 1, After,S1),
atom_number(S1,N),
L1 is L-1,
sub_atom(S, 1,L1, After ,S2),
atom_number(S2,B2),
convertBinToDec(B2,D1),
D is D1+((2*N)**L1).
convertBinToDec(0,0).
convertBinToDec(1,1).
Run Code Online (Sandbox Code Playgroud)
谓词采用 B 是整数形式的二进制数,应该返回 D 其相应的十进制形式,对不起,我对声明式编程语言还是个新手,但我不知道为什么我上面的代码总是错误,我觉得有什么问题使用基本情况 也不允许使用 prolog 库
鉴于 Prolog 支持使用0b前缀表示二进制数,例如0b10011101,您可以使用标准number_codes/2谓词来执行转换:
convert_binary_to_decimal(Binary, Decimal) :-
number_codes(Binary, Codes),
number_codes(Decimal, [0'0, 0'b| Codes]).
Run Code Online (Sandbox Code Playgroud)
示例调用:
| ?- convert_binary_to_decimal(10011101, Decimal).
Decimal = 157
yes
Run Code Online (Sandbox Code Playgroud)
验证结果:
| ?- Decimal is 0b10011101.
Decimal = 157
yes
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |