質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Prolog

Prologは、非手続き型プログラミング言語です。述語論理を使った論理型言語と言われており、自然言語解析や理解、推論などのAIに有効です。エキスパートシステム開発などに用いられています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

936閲覧

Prologを用いてリストの最小値の探索とそれが何番目にあるかを表示したい。

mt0503xx

総合スコア7

Prolog

Prologは、非手続き型プログラミング言語です。述語論理を使った論理型言語と言われており、自然言語解析や理解、推論などのAIに有効です。エキスパートシステム開発などに用いられています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/06/30 09:18

getminth([],M,N). getminth([L1|L2],M,N):- getminth(L2,L1,1,M,N). getminth([],M1,N1,M,N). getminth([L1|L2],M1,N1,M,N):- N2 is N1+1, M1 > L1, M is L1, N is N2, getminth(L2,L1,N2,M,N). getminth([L1|L2],M,N,M1,N1):- N2 is N1+1, getminth(L2,M1,N2,M1,N2).

このようにコードを書きましたが、実装できていません。
Mで最小値を、Pで何番目かを表示したいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/06/30 09:29

prolog のご質問で java や python のタグをお付けになっているのは何故でしょう。
melian

2022/07/01 10:32

SWI Prolog であれば、 idxmin(List, Min, Idx) :- min_member(@=<, Min, List), nth0(Idx, List, Min). でしょうか。最小値が複数ある場合は、最初の最小値のみになりますけれども。
mt0503xx

2022/07/02 07:55

ありがとうございます。 min_member、nth0などの述語を使わずに作成したいです。。。
xebme

2022/07/03 01:09 編集

https://teratail.com/questions/346100 関数型言語のfoldlを使うとすれば、アキュムレータとしてタプル (最小値,最小値の要素番号,現在の要素番号) を用意してリストの要素を順に処理し最後に(最小値,最小値の要素番号)を採用します
xebme

2022/07/03 01:10 編集

ただし最小値が複数ある場合、判定条件に応じて先頭か末尾の最小値が得られます。複数ある場合は、Prologのユニフィケーションが得意なのでは。
guest

回答1

0

再帰を使う

M,N,Sをそれぞれ、最小値、最小値の要素番号、現在の要素番号としています。最小値が複数ある場合は最後の要素番号Nを求めます。

min(A,_,A,Z,A,Z). min(A,_,B,Z,B,Z) :- B < A. min(A,Z,B,_,A,Z) :- A < B. getminth([X],X,S,S). getminth([X|XS],M,N,S) :- S1 is S+1, getminth(XS,M1,N1,S1), min(X,S,M1,N1,M,N).

参考にしたのはSeven Languages: Week 3 (Prolog) - Day 2です。
Bruce Tateの『7つの言語7つの世界』のprologの2日目の課題から検索しました。

このようにすると、最小値が複数ある場合に最初の要素番号Nを求めます。

min(A,Z,A,_,A,Z). min(A,_,B,Z,B,Z) :- B < A. min(A,Z,B,_,A,Z) :- A < B.

投稿2022/07/08 13:57

xebme

総合スコア1081

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xebme

2022/07/08 21:49

述語を使ってはいけない ... 。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問