Prolog中从十六进制到二进制的转换

时间:2018-06-14 18:37:16

标签: binary prolog hex converter

以下是一些将十六进制转换为二进制的程序,我需要为<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} !^example\.com$ [NC] RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301] </IfModule> 获取类似X = [1,1,1,1,0,0,0,0]的结果。

所以我需要加入所有列表。有人可以告诉我该怎么做吗?

pred([f,0])

我的问题在追加。

1 个答案:

答案 0 :(得分:0)

让我们从一些例子开始,假装我们已经有了这个谓词:

?- pred( [f, 0],  X ).
X = [1,1,1,1, 0,0,0,0].        % that's what you said you want, isn't it?

?- pred( [f, 0],  [1,1,1,1, 0,0,0,0] ).
yes.

?- pred( [f | [0]],  [1,1,1,1 | [0,0,0,0]] ).
yes.

?- pred( [f | HEX], [A,B,C,D | BIN] ),  [A,B,C,D] = [1,1,1,1],  pred( HEX, BIN).
yes.

?- pred( [f | HEX], [A,B,C,D | BIN] ),  hex(f, [A,B,C,D]),  pred( HEX, BIN). 
yes.

?- pred( [0 | HEX2], [A2,B2,C2,D2 | BIN2] ),  hex(0, [A2,B2,C2,D2]),  pred( HEX2, BIN2). 
yes.

?- pred( [0 | HEX2], [A2,B2,C2,D2 | BIN2] ),  hex(0, [A2,B2,C2,D2]),  
                                               HEX2 = [], BIN2 = [],  pred( HEX2, BIN2). 
yes.

是?对? (如果不清楚,请考虑身份[0] = [0 | []])。

这意味着它也必须是

的情况
?- HEX2 = [], BIN2 = [],  pred( HEX2, BIN2). 
yes.

?- pred( [], []). 
yes.

瞧,我们看到必须的基本情况。正确?

此外,我们实际上已经看到了递归案例必须具备的内容。而且你不需要在那里进行任何明确的append呼叫。这样:

?- pred( [f | HEX], [A,B,C,D | BIN] ),  hex(f, [A,B,C,D]),  pred( HEX, BIN). 
yes.

可以写成

?- pred( [F | HEX], [A,B,C,D | BIN] ),  F = f, hex(F, [A,B,C,D]),  pred( HEX, BIN). 
yes.

但实际上,它很容易概括为

?- pred( [F | HEX], [A,B,C,D | BIN] ),  hex(F, [A,B,C,D]),  pred( HEX, BIN). 
yes.

你有它。

请参阅? Prolog非常有趣。 Prolog很容易。 Prolog只是说出你的意思。