[解決済み] Prologにおける"!"とは
2022-01-31 10:45:59
質問
Prologで"!"は何をするのか、どなたか説明していただけませんか?私はそれを理解することはできません。 ここに、異種リストのどれだけのサブリストが山の側面を持つかをカウントするコードがあります。
nrSubliste([], 0).
nrSubliste([H|T], R):-
is_list(H),
munteMain(H),!,
nrSubliste(T, R1),
R is R1 + 1.
nrSubliste([_|T], R):-
nrSubliste(T, R).
munteMain
は、線形リストが山の側面を持つかどうかを検証します。
どのように解決するの?
感嘆符
!
は
カット
は、Prologでは常に成功する特別なゴールであり、ブロックの
バックトラック
は、その上にあるすべての分岐で、代替案がある可能性があります。
あなたの場合は、いったん
munteMain/1
が見つかった場合、プログラムは決して後戻りして別の解決策を探すことはありません。具体的には、Prologは、あなたの
nrSubliste/2
ルール、すなわち、リストヘッドを無視して
_
もし
H
は、次のようなものです。
munteMain(H)
は成功する。
を使用することに注意してください。
!
というのも、第3節のロジックは第2節のロジックに依存するため、コードが多少読みにくくなり、メンテナンスもしにくくなるからです。カットなしでプログラムを書き直すには
証明できない
演算子
\+
:
nrSubliste([H|T], R):-
is_list(H),
munteMain(H),
nrSubliste(T, R1),
R is R1 + 1.
nrSubliste([H|T], R):-
is_list(H),
\+ munteMain(H),
nrSubliste(T, R).
関連
-
[解決済み】Prolog - 引数が十分にインスタンス化されていない
-
[解決済み] リスト内の連続した重複を識別する最もPythonicな方法は何でしょうか?
-
[解決済み] リスト作成/連結のための構文
-
[解決済み] 既知のウェブクローラーの一覧はありますか?[クローズド]
-
[解決済み] Powershellですべてのデバイス、パーティション、ボリュームを一覧表示する
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] リスト内の重複を削除する
-
[解決済み】Homebrewのインストール可能なパッケージのリストを見つけるにはどうしたらいいですか?
-
[解決済み】IEnumerable vs List - What to Use? どのように動作するのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TypeError: リストのインデックスは整数でなければならず、floatではない
-
[解決済み] リストに指定されたメンバが含まれているかどうかを判断するルールを定義する
-
[解決済み] Ocaml: list.lengthを使用する。
-
[解決済み] リスト内の連続した重複を識別する最もPythonicな方法は何でしょうか?
-
[解決済み] Prologでリストを平坦にする
-
[解決済み] OCaml標準ライブラリ関数によるリストの並べ替え
-
error C2955: 'std::list' : クラステンプレートの使用にはテンプレート引数のリストが必要です。
-
リストコレクションに関するいくつかの一般的な操作
-
[解決済み] Haskellでコマンドラインghciでリストをソートする方法
-
[解決済み】Homebrewのインストール可能なパッケージのリストを見つけるにはどうしたらいいですか?