Prologでソート(リスト、ソート)を定義する方法 -- list フィールド と sorting フィールド と prolog フィールド 関連 問題

How to define sort(List,Sorted) in Prolog












1
vote

問題

日本語

Prologの述語 sort(List,Sorted) を定義する方法 例えば、 sort([3,2,4],[2,3,4]) はtrueを返します。 私はこれの組み込み述語があることを知っていますが、それを定義する方法を知りたいです。

英語

How to define the predicate sort(List,Sorted) in Prolog? E.g., sort([3,2,4],[2,3,4]) returns true. I know there is a built-in predicate of this, but I want to know how to define it.

</div
        
     
     

回答リスト

2
 
vote

これは答えではありませんが、コメントには長すぎるいくつかの提案です。

あなたはおそらくそれを気付くことを理解していますが、それでもあなたの種類を定義することは純粋にPrologの構文を学ぶ目的で運動です。実際にはスタッフをソートする必要がある場合は、常にライブラリ<コード> sort を使用する必要があります。

それでは、「...しかし私はそれを定義する方法を知りたい」:それはどういう意味ですか?それはあなたが選別アルゴリズムを選んだことを意味しますが、プロローグでそれを実装する方法についてはよくわかりませんか?あるいは、いくつかのアルゴリズムの1つを選択するのに問題があることがありますか?あるいは、どの並べ替えアルゴリズムが存在するかわからないのですか?

と提案:ソートアルゴリズムを選択するときは、シングルリンクリストで使用されることを意味するものを好みます。 Prologリストは、単独リンクリストにかなり似ています。

と別の提案:既存のコードを(1つのコメンタとしてうまく指摘したように)見て、また無料のProlog実装の1つのライブラリコードを調べます。たとえば、ここにSORT のフルコードがSWI-Prologから入手可能です。すぐに助けを求めるのではなく、数分の検索を費やすだけでは、見つけるのは簡単です。

 

This is not an answer, but a few suggestions that are too long for a comment.

You probably realize that, but still, keep in mind that defining your sort is purely an exercise with the purpose of learning Prolog syntax. You should always use the library sort if you actually need to sort stuff.

Then, "... but I want to know how to define it": What does that mean? Does it mean that you have chosen a sorting algorithm, but you are not sure about how to implement it in Prolog? Or that you have trouble choosing one of several algorithms? Or that you don't know what sorting algorithms exist?

And a suggestion: when choosing a sorting algorithm, prefer one that is meant to be used with singly linked lists. Prolog lists are quite similar to singly linked lists.

And another suggestion: look at existing code (as one commenter nicely pointed out), and also look at the library code of one of the free Prolog implementations. For example, here is the full code of a sort available from SWI-Prolog. It is easy to find, if you just spend a few minutes searching instead of immediately asking for help.

</div
 
 
 
 

関連する質問

1  このプロローグ述語が統一されないのはなぜですか?  ( Why wont this prolog predicate unify ) 
a *の反復の可能なすべての後続状態の状態を見つけるための述語を書いて、現時点でこれを表す[(費用、州)]のようなリストに置きます。 <コード> addSuccessors(L, [], _). addSuccessors(L, [X|T], OrigLis...

1  マトリックス(スクエア)は主対角線について対称的です  ( Matrix square is symmetric about the main diagonal ) 
行列(正方形)が主対角線周囲に対称的かどうかを決定する述部を定義します。述部は約読み取られます。ここで、Zは主対角線についてのマトリックス(正方形)対称です。 対称(Z) 行と列が等しいことを確認することですが、運動の上昇を始める方法がわからないことです......

1  アスタリスクのm * nグリッドを表示するプロローグプログラムを書く?  ( Write a prolog program displaying an mn grid of asterisk ) 
再帰的な述語 rectangle を書く必要があるため、 rectangle(M, N) は、 99887777662 の 99887662 の M x N の中で書き出します。 M 行と N 列の列は、四角形の列にする必要があります。例えば: <事前> <...

1  Prologでランダムな機能をどのように実装していますか?  ( How implement a random function in prolog ) 
ランダム(1)がCIAO Prologシステムでは機能しないため、ランダムな関数を実装しようとします。誰でも私がリストからランダムな値を返す関数を作るのを助けることができます。 ...

3  プロローグの長さが1つのリストにリストを分割する  ( Splitting a list into two lists equal in length in prolog ) 
リストを1つの長さのリストで分割するためにPrologの述語を書き込んでいます。例えば: <事前> <コード> div([1,2,3,4] , X , Y). X = [1,2]. Y = [3,4]. それは私のコードですが、それは機能していません: <...

0  1でのプロローグ反復  ( Prolog iteration off by 1 ) 
myfor(3,7,X). を呼び出すときに myfor というイテレータは X = [3, 4, 5, 6, 7] を返します。ただし、このコードは X = [4, 5, 6, 7] のみを返します。最初にスキップします。誰かが何が悪いのか教えてもらえま...

7  リストの例では、Prolog要素  ( Prolog element in lists replacement ) 
こんにちは私はあなたがこれを使って私を助けることができるかどうか疑問に思いました Prologのプログラミングから:別の指定された要素によるリスト内の任意の与えられた要素のためのPrologスクリプトを書き込みます。例えば: <事前> <コード> replac...

2  プロローグ動的述語基本的な使用法  ( Prolog dynamic predicates basic usage ) 
https://swish.swi-prolog.org <コード> :- dynamic happy/1. go:- assert(happy(mia)), write(happy(mia)). go. を実行した場合 <事...

28  SWI-PROLOGに事実を作成する方法  ( How to create a fact in swi prolog ) 
私はただのようなものを作成したいだけです。 like(x,y) 。 私は長い間試みていて、本当にイライラしています、誰かがそれをする方法を教えてください.?? !!! ...

-4  Prologの2つのリストから代替要素をマージします  ( Merge alternate elements from two lists in prolog ) 
リストzがリストxとyから代替要素の合併である場合に成功したProlog Predicate mergealt(X,Y,Z) を書く必要があります。 入力と出力は以下のようになります。 <事前> <コード> ?- mergealt([1,2,3,4],[6,...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有