私はプロローグ付きの小さなプロジェクトに取り組んでいます。私は最適化されたかについて疑問に思った組み込み述語の時間複雑度
を(、リストおよび単一の要素を扱うとき[Head | List2]
などを差し引くための私自身の述語を書く)を除去する際には他の選択肢について賛成のappend(?List1, ?List2, ?List1AndList2)
とsubtract(+Set, +Delete, -Result)
などの述語に建てられていることに気付いてきました組み込み述語は一般的にプロローグにありますか?私は、減算の複雑さが|Delete|*|Set|
であることを読んで、私が使用して、非常に有意な増加を得た:
removeFriendsOfS(S, [Head | Tail], OutputAcc, Output) :-
relation(S, Head),
removeFriends(S, Tail, OutputAcc, Output),
!.
removeFriendsOfS(S, [Head | Tail], OutputAcc, Output) :-
not(relation(S, Head)),
removeFriends(S, Tail, [Head | OutputAcc], Output),
!.
それはあなた自身の述語を記述することなく、既存のものを使用することを推奨していますか?私はちょうどプロローグで始まったので、まだ経験が豊富です。
この述部はどのように動作するのかわかりません。なぜなら、基本的な '[]'が存在しないからです。 –
ビルトインの述部は、Cの「フードの下」に書かれており、優れたパフォーマーです。しかし、組み込みの述語はあなたが望むよりも一般的であり、一般的でないものを書くことは一般性を失うことでよりうまくいく可能性があります(私はあなたが持っているカットを見ており、 。機能面で同じような比較をしていると確信していますか? – lurker
ベースケース 'removeFriends(_、[]、Output、Output): - !.'を含めるのを忘れてしまったようです。 – cjerik