第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在列表Prolog中找到2的冪

在列表Prolog中找到2的冪

我正在嘗試在Prolog(SWI Prolog)中創(chuàng)建一個列表,并檢查哪些數(shù)字是2的冪,然后第二次查找該列表中特定數(shù)字的次數(shù)(在本示例中,我試圖查找該數(shù)字多少次)列表中為3)。例如,如果您問?- check([0,2,3,-5,-2,1,8,7,4], MULT2, THREE).你應該看到MULT2=[2,8,4] THREE=1 我的第一個嘗試找到解決方案的方法是搜索帶有head的列表,并執(zhí)行head mod 2 = 0以查找所有2的冪的數(shù)字,但是出了點問題,我只得到“ false”作為答案。
查看完整描述

2 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

這是您以邏輯上純凈的方式找到“二的冪”的方法!


使用sicstus-prolog 4.3.5 library(reif)和library(clpz):


:-use_module([ library(reif),library(clpz) ])。


power_of_two_t(I,T):-

   L#=分鐘(I,1),

   M#= I / \(I-1),

   呼叫((L = 1,M = 0),T)。%使用庫(reif)的(=)/ 3和(',')/ 3

結合使用元謂詞的示例查詢1:tfilter/3power_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:要重現(xiàn)結果,請使用call_det/2如下定義:


call_det(G_0,Det):-

   call_cleanup(G_0,標志=設置),

   (nonvar(Flag)

   -> Det = true

   ; Det =假

   )。


查看完整回答
反對 回復 2019-11-04
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

在一個謂詞中同時執(zhí)行兩項如此不同的任務是一件奇怪的事。您可能應該有兩個單獨的謂詞,一個謂詞用于計算2的冪,另一個謂詞用于計算3s。然后,您可以將它們組合成一個謂詞,例如:


check(Nums, MULT2, THREE) :-

    count2powers(Nums, MULT2),

    count3s(Nums, THREE).

之后,您可以進一步分解并使用單獨的謂詞來檢查數(shù)字是否為2的冪:


is2power(1).

is2power(N) :-

    N > 0,

    N2 is N // 2,

    N2 * 2 =:= N,

    is2power(N2).

這是基本的軟件工程,通過這種方式,您可以逐步構建程序,并且不僅可以提出“整個程序都返回false”,還可以提出更具體和有意義的問題。


查看完整回答
反對 回復 2019-11-04
  • 2 回答
  • 0 關注
  • 590 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號