問題タブ [clpfd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
prolog - このPrologフィボナッチ関数が「instantiation_error」を引き起こすのはなぜですか?
次の関数を使用してフィボナッチ数列を計算しようとしています。
これは、次のように機能することを目的としています。
しかし、私がこれを試してみると、次のように文句を言います。
なぜこれが起こっているのか誰かが理解していますか?
prolog - 可逆的な木の長さの関係
私は「純粋な」プロローグ(いいえis
、カット、または同様のもの。はい、それは宿題です)で可逆的な関係を書き込もうとしていますが、方法がわからないことを認めなければなりません。そのようなものを作るプロセスは見当たらない。
「純粋ではない」が可逆的な算術関係(add、mult、equal、less、...)が与えられ、これらの関係を作成するために使用する必要があります。
今、私は二分木の葉のリストであるtree(List,Tree)
場合に真である関係を作成することによって可逆関数を作成する方法を理解しようとしています。List
Tree
そのようなことを達成するために、私は葉tree_size(Tree,N)
があるときに真である関係を作成しようとしています。これが私の素朴で不可逆的な関係です:Tree
N
クエリは実行できますtree_len(some tree, N)
が、たとえば、は実行できないtree_len(X,3)
ため、元に戻すことはできません。これまでにいくつか試してみましたが、どこで何を探すべきかわからないので、がっかりしていることを認めなければなりません。これを行う方法は実際にありますか?
prolog - Prolog:整数リスト項目をパリティで分割する
整数のリストを入力として受け取り、からの偶数要素を含むリストとからの奇数要素のリストのL
2つのリストを生成する述語を記述します。L
L
prolog - SWI-Prologで事前定義された長さ/2の動作を複製するにはどうすればよいですか?
標準のlength/2述語の動作を複製しようとしています。特に、以下の例のように、述語が有界および非有界の引数に対して機能するようにします。
プレーンでシンプルな実装:
いくつかの問題があります。ケース3では、正解を生成した後、無限ループに入ります。この述語を決定論的な述語に変換できますか?または、falseで停止する非決定論的ですか?
はい!しかし、赤いカットを使用しています。参照:https ://stackoverflow.com/a/15123016/1545971
しばらくして、組み込みの長さ/2の動作を模倣する一連の述語をコーディングすることができました。my_len_tailは決定論的であり、すべてのケース1〜4で正しく機能します。もっと簡単にできますか?
@DanielLyonsがコメントで示唆しているように、clpfdを使用してチェックよりも延期することができます。しかし、それでも1つの問題が残ります。ケース3(my_len_clp(X, 3)
)では、述語は非決定的です。どうすれば修正できますか?
zcompare/3
CLP(FD)ライブラリから使用して修正できます。参照:https ://stackoverflow.com/a/15123146/1545971
c - 若いタブローのためのプログラミング
奇妙な質問が続きます。
私は学校で問題解決コンテストを行っており、コンピューターを使用することが許可されています。競技会でコーディングの仕方を知っているのは私だけなので、C と Pascal プログラムを使用して問題をより迅速に解決します。疑似コードからコードへの演習、アルゴリズム、コラッツ予想の検証などでそれを行いました。
さて、昨日、私は次の課題 (4 月 18 日) のトレーニングをしていて、Young タブローの演習を見ました。それは次のように表現されました(イタリア語から翻訳するために最善を尽くします):
「Ferrers ダイアグラムは、1 つ以上の水平行に分散された N 個のボックスの構成であり、左揃えで、すべての行がその上の行と同じかそれよりも少ない数のボックスを含むように構成されています。これらの構成は、この画像のようなボックスの数: (ソース: olimpiadiproblemsolving.it )
若いタブローは、1 から N までの整数で満たされた N 個のボックスの Ferrers ダイアグラムです。例: (ソース: olimpiadiproblemsolving.it )
ボックス内の数字が行ごと、列ごとに昇順になるように並べ替えられている場合、テーブルは「標準」です (例: 1 番目、3 番目、5 番目のタブロー)。標準的なタブローでは、最初の行の最初のボックスには常に 1 が含まれます。N は常に、図のいずれかの行の左端のボックスにあります。
問題
[6,3,2,1,1,1] Ferrers ダイアグラムを考えてみましょう:
1) 1 行目の 6 番目のボックスに 6 が固定され、1 列目の最後のボックスに 11 が固定されている場合、標準的な方法で図を完成させますか?
2) 1 行目の 6 番目のボックスに 7 が固定され、1 列目の最後のボックスに 11 が固定されている場合、標準的な方法で図を完成させる方法はいくつありますか?
3) 1 行 6 番目のボックスに 8 が固定され、1 列目の最後のボックスに 11 が固定されている場合、標準的な方法で図を完成させる方法はいくつありますか?
」これらの数字と「-1」を「行末文字」として埋めた行列を使って、「タブローが標準になるように可能な限りすべての方法で埋めてください」とコーディングするにはどうすればよいですか?
prolog - 制約プログラミング、リスト内の数値の繰り返し、プロローグ
リスト内の数値の繰り返しを制限するにはどうすればよいですか?
次のコード例で適切な制約は何ですか?
いくつかのサンプル クエリと予想される回答:
list - 整数を数字のリストに変換するプロローグ
整数と数字のリストであるという述語を記述し、Digits に整数の数字が適切な順序で含まれている場合に成功します。つまり、次のようになります。
これが私がこれまでに持っているものです: