Q
開始結束編號
1
A
回答
2
這裏頭腦簡單的程序
findSequence(N, N, N) :- !.
findSequence(S, E, N) :-
S < E, (N = S ; T is S + 1, findSequence(T, E, N)).
findSequence(S, E, N) :-
S > E, (N = S ; T is S - 1, findSequence(T, E, N)).
對於任何實際用途,你應該檢查是否between/3可以工作。
+0
完美答案。 – 2013-02-15 02:11:49
0
考慮使用中,你積累了遞歸謂詞(列表中的)值從起始值(-4),以最終值(-6)。
0
這應該工作。這考慮到從< =到。
?-findSequence(1,3,List).
List=[1,2,3].
yes
0
這是什麼你問是不是特別難一個有趣的情況:如果你想檢查是否
findSequence(X,X,[X]):-!.
findSequence(From,To,[From|Rest]):-SuccFrom is From +1, findSequence(SuccFrom ,To, Rest).
這返回一個列表,即稍微複雜一些可以寫成但是你設法以這樣一種迂迴的方式來問它,我們花了很多時間試圖弄清楚你想要什麼。你根本不需要一個序列(即一個列表),你需要連續的答案。而且你希望它能夠處理所有的整數,而不僅僅是自然數 - 這在你的例子中是隱含的,但沒有說明。另外,你的例子並不適用於天真的解決方案,因爲-4大於-6,這與通常寫入該謂詞的方式相反。
爲了應對這一切,我在信心最簡單的事情,需要圖書館clpfd
:
:- use_module(library(clpfd)).
我們需要一些幫助的謂詞:
min(X, Y, Z) :- X < Y -> Z = X ; Z = Y.
max(X, Y, Z) :- X < Y -> Z = Y ; Z = X.
這些只是找到最小值和最大值;我通常會每行寫兩行,但這樣更方便。現在的解決方案:
findSequence(X, Y, Z) :-
min(X, Y, Low),
max(X, Y, High),
Z in Low..High,
label([Z]).
這照顧你的用例和明顯的。
相關問題
- 1. Sql範圍組開始和結束編號
- 2. Excel從開始和結束編號和標記創建列表
- 3. Daterange Picker開始結束開始時
- 4. 查詢結束開始與
- 5. UITableView開始/結束更新
- 6. Rails delayed_job開始和結束
- 7. 在開始和結束點(!)
- 8. Svg animate:開始和結束
- 9. 在開始/結束日期
- 10. 獲取的開始/結束
- 11. 獲取剪輯開始幀號和結束幀號
- 12. 暫停GIF在開始和結束與覆蓋的文本信號開始和結束
- 13. XSLT離開開始和結束標記
- 14. Youtube API查詢:開始之前,開始之後,結束之前,結束之後
- 15. 圓弧變換開始結束點到開始角度結束角度
- 16. UITextField編輯開始呼籲查看結束編輯
- 17. HTML編輯器 - 同時編輯開始和結束標記
- 18. 如何在RichString中編寫開始/結束表達式的符號?
- 19. SQL查詢返回行,其中編號的列表是開始和結束值
- 20. 從javascript中的變量中刪除開始和結束逗號
- 21. vim中的開始和結束括號之間的複製行
- 22. 從開始和結束刪除雙引號
- 23. iPhone Pickerview省略號在開始,而不是結束
- 24. php省略號,整個單詞的開始和結束與preg_replace
- 25. 刪除開始/結束從jQuery的陣列雙引號
- 26. 如何替換oracle中的開始和結束引號sql
- 27. 不應該在開始和結束時允許逗號
- 28. 星號的上下文 - 多個開始和結束
- 29. 如何在開始和結束時從JSON中刪除括號?
- 30. 如何查找我的未結束括號從GCC開始?
我寫了以下兩行,如果我跟蹤它正在按照我的預期行進,但它正在打印最終值:
– 2013-02-14 16:59:07
以下兩行在哪裏? – 2013-02-14 17:02:57
@DanieLyons和Alejandro:我寫了下面的findSequence(X,X,X)。 findSequence(X,Y,Z):-Y> X,X1是X + 1,findSequence(X1,Y,Z)。這裏的問題是印刷最終的價值。我想在遞歸中爲每個X的值打印它。 – 2013-02-14 17:06:14