2016-12-22 10 views

答えて

0

まず、「is_repeated(X)」と言って、複製された要素が含まれていればどのリストの結果も真となると言うのは奇妙です。 Listに重複要素が含まれていると、「is_repeated(List)が保持します」と表示されます。この問題を解決するためにパーツビンから必要な部分は、再帰とmember/2またはmemberchk/2、またはselect/3です。明示的な再帰はありませんが、代わりにPrologプログラミングの話をしましょう。私はPrologが本当にきちんとしていると思うので、Prologをきれいにすることの本質は、このような愚かな問題を抱えて、Prologコードに問題文を翻訳することです。

たとえば、クエリに「唯一Listに偶数が含まれている場合、only_evens(List)が保持される」と仮定します。私がeven/1を持っているとします。その引数が偶数であれば真です。その後、forall(member(X, List), even(X))は簡単な翻訳になります。最初に疑問を論理形式∀xεL、even(x)に変換すると、さらに明らかになります。さて、∀x∈L、F(x)とforall(member(X, L), F(X))の関係は明白でなければなりません。

実際に質問する必要があるのは、質問の論理的定式は何ですか?私はそれがこのように聞こえるだろうと想像します:LがリストL 'の前に置かれた要素Xであるとします。 XがL 'で出現する場合、Lは重複を含む。これは、問題を解決するための素晴らしい、効率的な方法です。今、それをPrologに翻訳できますか?

関連する問題