clpfd

    4熱度

    4回答

    我寫了下面的程序,它計算輸入數組最長的非遞減子序列。 從列表中找到最長列表的子程序取自計算器(How do I find the longest list in a list of lists)本身。 :- dynamic lns/2. :- retractall(lns(_, _)). lns([], []). lns([X|_], [X]). lns([X|Xs], [X, Y|Ls

    3熱度

    5回答

    我目前正在爲Prolog中的樓層規劃問題編寫求解程序,並且在標註部分存在一些問題。 目前的問題是我的約束被張貼,但是當我啓動標籤時,它需要永遠找到解決方案。我想引入一些啓發式。 我的問題是,我該如何手動標記我的變量?恐怕定義這樣的clpfd變量之後: X in Xinf..Xsup ,並將其約束,如果我這樣做: fd_sup(X, Xmax), X = Xmax, ... 在我的自

    9熱度

    1回答

    有一些instances其中遞歸謂詞可以是CLP(FD) - 謂詞變爲雙向的好處。這種方法有什麼限制?例如可以如下computation CLP(FD)-fied: Fn: n-th Fibonacci Number Ln: n-th Lucas Number (starting with 2) 通過該加倍遞歸步驟: F2n = Fn*Ln L2n = (5*Fn^2+Ln^2)//2

    4熱度

    4回答

    我想要計算在Prolog中K元素的排列,其中元素的總和等於給定的S。所以,我知道可以通過找到組合來計算排列,然後對它們進行排列。我知道如何計算K要素的組合,是這樣的: comb([E|_], 1, [E]). comb([_|T], K, R) :- comb(T, K, R). comb([H|T], K, [H|R]) :- K > 1, K1 is K-1,

    1熱度

    1回答

    我的一些Prolog程序可以利用有點有點,如果我可以替換所有(is)/2爲基礎的整數算術的clpfd對應。 所以我想力量...與... clpfd,所以我可以用的東西clpfd-Y :) 考慮以下五個Prolog的處理器,支持clpfd更換X is 10^3: GNU Prolog 1.4.4 ?- X #= 10^3. uncaught exception: error(type_erro

    3熱度

    1回答

    我最近在Prolog中看到了一個使用謂詞#=/2的程序。我看着這個向上上the SWI prolog website在那裏它們將它定義爲 算術表達式X等於Y.當在整數推理,替換是/ 2#=π/ 2以獲得更一般的關係。 什麼我不明白這是怎麼#=/2可以更「一般」,因爲它是隻爲整數。

    1熱度

    2回答

    我試圖解決使用邏輯約束以下問題: 封隔器,具有5個箱子放到一個長的卡車。 5個板條箱包含雞,大麥,狐狸,鼠藥和小麥。包裝箱需要 排列成一條長長的線,它們之間沒有任何間隙,因此: •雞與狐狸分開; •鼠毒不在大麥旁邊; •鼠藥不在小麥旁邊。 找出 如何安排這些包裝箱受到 這些包裝限制的不同方式。 這是我到目前爲止有: :- use_module(library(clpfd)). position

    3熱度

    1回答

    我有一個解決方案,它非常快速變慢的問題。 下面的代碼確定是否「規則」的陣列是有效的 - 和例子可以是 rules_valid([rule(2,[1,2,3]), rule(2,[1,2,3])],[]) 這應該是假,因爲它不能夠選擇4(2 + 2)不同於所述數清單和 rules_valid([rule(2,[1,2,3]), rule(2,[3,4,5])],[]) 因此屬實。 對於非常小

    2熱度

    2回答

    給定兩個排序列表Xs和Ys,我如何確保Xs中的任何X與Ys中的任何Y之間的絕對差值至少爲2? 示例查詢與期望答案: ?- different([1,2,4],[5,6]). % 5-4 < 2 false ?- different([1,4],[2,6]). % 2-1 < 2 false ?- different([1,2,6],[4,8]). % 4-2 >= 2 and 6-4 >

    3熱度

    2回答

    solve(Amounts) :- Total = 1505, Prices = [215, 275, 335, 355, 420, 580], length(Prices, N), length(Amounts, N), Amounts :: 0..Total//min(Prices), Amounts * Prices #= Tot