gpt4 book ai didi

list - 在列表 Prolog 中查找 2 的幂

转载 作者:行者123 更新时间:2023-12-02 08:35:55 24 4
gpt4 key购买 nike

我正在尝试在 Prolog (SWI Prolog) 中创建一个列表,然后检查哪些数字是 2 的幂,然后查找特定数字在列表中出现了多少次(在此示例中,我试图查找有多少次数字 3 在列表中的倍数)。例如,如果你问

?- check([0,2,3,-5,-2,1,8,7,4], MULT2, THREE).

你应该看到

MULT2=[2,8,4] 
THREE=1

我第一次尝试找到解决方案是使用 head 搜索列表并执行 head mod 2 = 0 以查找所有 2 的幂的数字,但出了点问题,我只得到“false”作为答案。

最佳答案

这里是您如何以逻辑纯的方式找到“2 的幂”!

使用 4.3.5、library(reif)library(clpz):

:- use_module([library(reif), library(clpz)]).power_of_two_t(I, T) :-   L #= min(I,1),   M #= I /\ (I-1),   call((L = 1, M = 0), T).      % using (=)/3 and (',')/3 of library(reif)

Sample query1 using meta-predicate tfilter/3 in combination with power_of_two_t/2:

?- tfilter(power_of_two_t, [0,2,3,-5,-2,1,8,7,4], Ps).
Ps = [2,1,8,4]. % succeeds deterministically

这是评论建议的更一般的查询:

?- tfilter(power_of_two_t, [X], Ps).
Ps = [X], 0#=X/\_A, _A+1#=X, X in 1..sup, _A in 0..sup
; Ps = [], dif(_A,0), _A#=X/\_B, _B+1#=X, X in 1..sup, _B in 0..sup
; Ps = [], dif(_A,1), _A#=min(X,1), _B#=X/\_C, _C+1#=X, X#>=_A, _A in inf..1.

<支持>脚注 1: 上面显示的答案序列经过修饰以表明调用的确定性。

脚注 2:要重现结果,请使用定义如下的 call_det/2:

call_det(G_0, Det) :-   call_cleanup(G_0, Flag = set),   (  nonvar(Flag)   -> Det = true   ;  Det = false   ).

关于list - 在列表 Prolog 中查找 2 的幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21518566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com