【发布时间】:2020-03-21 16:22:55
【问题描述】:
我在一个更大的代码库中遇到了这个问题,但将其缩减为一个最小的可重现示例。这是汇编程序的一些代码:
:- use_module(library(clpfd)).
bigconst(X) :- X #=< 0x3FF, X #>= 0.
asm(instruction('ADD', [A]), R) :-
bigconst(A),
R #= 0b0000 + (A << 4).
asm(instruction('SUB', [A]), R) :-
bigconst(A),
R #= 0b0001 + (A << 4).
组装时似乎可以工作:
?- asm(instruction('SUB', [5]), R).
R = 81.
但是在拆卸的时候好像失败了:
?- asm(I, 81).
I = instruction('ADD', [_42146]),
_42146 in 0..1023,
81#=_42146<<4 .
这是我的程序中的错误还是 Prolog 中的错误?我该如何解决这个问题?
【问题讨论】:
-
根据您的编写方式,您的代码完全符合我的预期。
标签: prolog clpfd prolog-toplevel