Prolog初心者のスレ
これは良い言語だ…
探検
【論理】Prolog【初心者】
レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
2010/11/06(土) 13:00:56811デフォルトの名無しさん
2016/05/07(土) 09:29:24.35ID:idLmAwju >>810
ありがとうございます。
図々しく欲を言えば、応用範囲が広くなればもっと便利なのです。
数の概念を数学的に理解しすぎるとシンボルグラウティングを経た後の統計処理でプログラムが複雑になりすぎるので
ありがとうございます。
図々しく欲を言えば、応用範囲が広くなればもっと便利なのです。
数の概念を数学的に理解しすぎるとシンボルグラウティングを経た後の統計処理でプログラムが複雑になりすぎるので
812デフォルトの名無しさん
2016/05/07(土) 11:51:33.38ID:LMdi7EDF813デフォルトの名無しさん
2016/05/07(土) 17:29:00.43ID:v072DMKU ホント何がしたいのか分からない
がんばって自力で実装するしかない
がんばって自力で実装するしかない
814デフォルトの名無しさん
2016/05/07(土) 18:15:08.71ID:v072DMKU 072は自分でどうぞ
815デフォルトの名無しさん
2016/05/08(日) 21:27:34.20ID:X4yv1I6s まあPrologに一般的な概念を覚えさせて
具体的問題を個別対応でなく
その応用で一気に解かせたくなる
という気持ちは分かる
でもほとんどの場合そう上手くいかない
フレーム問題みたいなものがあるから
具体的問題を個別対応でなく
その応用で一気に解かせたくなる
という気持ちは分かる
でもほとんどの場合そう上手くいかない
フレーム問題みたいなものがあるから
816デフォルトの名無しさん
2016/05/09(月) 17:43:56.94ID:4nfgQfeQ 論理型言語も圏論と関係あるんですか?
817デフォルトの名無しさん
2016/05/09(月) 23:39:14.35ID:YJQ3jsKC 様相論理を実装しようとするまでは圏論無視してても問題ない
818デフォルトの名無しさん
2016/05/10(火) 02:27:30.00ID:QgY2EPAO 実装した後はどうなりますか?
819808
2016/05/10(火) 18:29:01.20ID:kw95GqYD >>807
ほかの人が言っているようにちょっとやりたいことがわからない(説明不足)けどこういうことかな?
DCGを使った。
ringo(Ret)-->[a],{Ret = ringo}.
banana(Ret)-->[a,a],{Ret = banana}.
ichigo(Ret)-->[a,a,a],{Ret = ichigo}.
mikan(Ret)-->[a,a,a,a],{Ret = mikan}.
kiwi(Ret)-->[a,a,a,a,a],{Ret = kiwi}.
fruit(X)-->ringo(X);banana(X);ichigo(X);mikan(X);kiwi(X).
ringo_ringo([First|Rest])-->ringo(First),ringo(Rest),[].
ringo_banana([First|Rest])-->ringo(First),banana(Rest),[].
fruit_pair([X | Y])-->fruit(X),fruit(Y),[].
main:-
phrase(ringo_ringo(X),RingoRingo,[]),
write(RingoRingo),
write(' '),
write(X),nl,
phrase(ringo_banana(Y),RingoBanana,[]),
write(RingoBanana),
write(' '),
write(Y),nl,
phrase(fruit_pair(Z),[a,a,a,a,a],[]),
write('[a,a,a,a,a] '),
write(Z),nl.
ほかの人が言っているようにちょっとやりたいことがわからない(説明不足)けどこういうことかな?
DCGを使った。
ringo(Ret)-->[a],{Ret = ringo}.
banana(Ret)-->[a,a],{Ret = banana}.
ichigo(Ret)-->[a,a,a],{Ret = ichigo}.
mikan(Ret)-->[a,a,a,a],{Ret = mikan}.
kiwi(Ret)-->[a,a,a,a,a],{Ret = kiwi}.
fruit(X)-->ringo(X);banana(X);ichigo(X);mikan(X);kiwi(X).
ringo_ringo([First|Rest])-->ringo(First),ringo(Rest),[].
ringo_banana([First|Rest])-->ringo(First),banana(Rest),[].
fruit_pair([X | Y])-->fruit(X),fruit(Y),[].
main:-
phrase(ringo_ringo(X),RingoRingo,[]),
write(RingoRingo),
write(' '),
write(X),nl,
phrase(ringo_banana(Y),RingoBanana,[]),
write(RingoBanana),
write(' '),
write(Y),nl,
phrase(fruit_pair(Z),[a,a,a,a,a],[]),
write('[a,a,a,a,a] '),
write(Z),nl.
820808
2016/05/10(火) 18:30:19.34ID:kw95GqYD 実行結果:
[2] 13 ?-
% Updating index for library c:/program files/swipl/library/
% c:/users/koyahata/documents/prolog/fruit2 compiled 0.00 sec, 11 clauses
[2] 13 ?- main.
[a,a] [ringo|ringo]
[a,a,a] [ringo|banana]
[a,a,a,a,a] [ringo|mikan]
true ;
[a,a,a,a,a] [banana|ichigo]
true ;
[a,a,a,a,a] [ichigo|banana]
true ;
[a,a,a,a,a] [mikan|ringo]
true ;
false.
やっつけなのでちょっとリストの作り方おかしいかもしれないけど…
[2] 13 ?-
% Updating index for library c:/program files/swipl/library/
% c:/users/koyahata/documents/prolog/fruit2 compiled 0.00 sec, 11 clauses
[2] 13 ?- main.
[a,a] [ringo|ringo]
[a,a,a] [ringo|banana]
[a,a,a,a,a] [ringo|mikan]
true ;
[a,a,a,a,a] [banana|ichigo]
true ;
[a,a,a,a,a] [ichigo|banana]
true ;
[a,a,a,a,a] [mikan|ringo]
true ;
false.
やっつけなのでちょっとリストの作り方おかしいかもしれないけど…
821808
2016/05/10(火) 18:38:04.23ID:kw95GqYD こういう質問もできるから、これでいいんじゃないの?
[2] 14 ?- phrase(fruit_pair([ringo|banana]),Ret,[]).
Ret = [a, a, a] ;
false.
[2] 15 ?- phrase(fruit_pair([banana|ichigo]),Ret,[]).
Ret = [a, a, a, a, a] ;
false.
[2] 14 ?- phrase(fruit_pair([ringo|banana]),Ret,[]).
Ret = [a, a, a] ;
false.
[2] 15 ?- phrase(fruit_pair([banana|ichigo]),Ret,[]).
Ret = [a, a, a, a, a] ;
false.
822808
2016/05/10(火) 18:40:22.90ID:kw95GqYD こういう質問もできるよ
[2] 16 ?- phrase(fruit_pair([banana|ichigo]),Ret,[]),phrase(fruit_pair(Y),Ret,[]),write(Y).
[ringo|mikan]
Ret = [a, a, a, a, a],
Y = [ringo|mikan] ;
[banana|ichigo]
Ret = [a, a, a, a, a],
Y = [banana|ichigo] ;
[ichigo|banana]
Ret = [a, a, a, a, a],
Y = [ichigo|banana] ;
[mikan|ringo]
Ret = [a, a, a, a, a],
Y = [mikan|ringo] ;
false.
[2] 16 ?- phrase(fruit_pair([banana|ichigo]),Ret,[]),phrase(fruit_pair(Y),Ret,[]),write(Y).
[ringo|mikan]
Ret = [a, a, a, a, a],
Y = [ringo|mikan] ;
[banana|ichigo]
Ret = [a, a, a, a, a],
Y = [banana|ichigo] ;
[ichigo|banana]
Ret = [a, a, a, a, a],
Y = [ichigo|banana] ;
[mikan|ringo]
Ret = [a, a, a, a, a],
Y = [mikan|ringo] ;
false.
823デフォルトの名無しさん
2016/05/10(火) 21:36:21.72ID:STQfDXP5 >>818
実装した様相論理を圏論で表現すると論文を書くときにかっこいい
実装した様相論理を圏論で表現すると論文を書くときにかっこいい
824デフォルトの名無しさん
2016/05/12(木) 02:37:17.88ID:QfZXVCzv 様相論理というのはPrologの拡張ですか?
825デフォルトの名無しさん
2016/05/12(木) 03:50:49.89ID:X1xCMOiV PrologでProlog処理系作って改造すると学部卒研レベルでも様相論理を実装できる
826デフォルトの名無しさん
2016/05/12(木) 07:12:33.29ID:QfZXVCzv 一階述語論理が論理型言語の計算モデルらしいですが、
高階述語論理をモデルとするような言語もあるのですか?
高階述語論理をモデルとするような言語もあるのですか?
827デフォルトの名無しさん
2016/05/17(火) 22:49:38.79ID:ihci1/VL C言語系はenumとswitchがあまり便利ではないから高階関数のようなものが必要だけど
Prologはtermとパターンマッチだけでほぼ満足してしまう
Prologはtermとパターンマッチだけでほぼ満足してしまう
828デフォルトの名無しさん
2016/05/17(火) 22:57:05.36ID:ncaU4ikw >>827
関数型言語なら代数バリアント使いつつ高階関数が必須なんですが
関数型言語なら代数バリアント使いつつ高階関数が必須なんですが
829デフォルトの名無しさん
2016/05/18(水) 01:07:17.80ID:kNiEPZvr mapとか高階関数の定義にバリアント使うけどmapを利用する側はバリアント意識してない
830デフォルトの名無しさん
2016/09/13(火) 00:19:04.93ID:jukzgj+D Prologとオントロジーは相性が良いと思うのですが
それに言及してる本などが少ないのは
あまり実用性がないと思われているのでしょうか?
それに言及してる本などが少ないのは
あまり実用性がないと思われているのでしょうか?
831デフォルトの名無しさん
2016/09/13(火) 23:04:44.72ID:6dgxPkoI 実用性はあるが、実用しようとするとPrologとあまり関係のないインターフェイスが超面倒臭い
インターフェイスの設計まで含んでるのがオントロジーだから、Prologにかぎったことではないが
インターフェイスの設計まで含んでるのがオントロジーだから、Prologにかぎったことではないが
832デフォルトの名無しさん
2016/09/14(水) 08:10:08.95ID:JzjCbHsO Prolog自体が知識ベースだからかも
833デフォルトの名無しさん
2016/09/17(土) 14:03:02.83ID:iKVkomQx >>828
findall/3というSQLのselectに近い組込述語があって、
?- L = [1,2,3],
findall(B,(member(A,L),foo(A,B)),L).
のように使える。これは、リストでなくfoo/1を参照して
?- findall(B,(boo(A),foo(A,B)),L).
とも変化できる。自由度が高い。
それで、map関数にあたるものは、Prologではほとんど使われない。
findall/3というSQLのselectに近い組込述語があって、
?- L = [1,2,3],
findall(B,(member(A,L),foo(A,B)),L).
のように使える。これは、リストでなくfoo/1を参照して
?- findall(B,(boo(A),foo(A,B)),L).
とも変化できる。自由度が高い。
それで、map関数にあたるものは、Prologではほとんど使われない。
834833
2016/09/17(土) 14:05:15.47ID:iKVkomQx 「これは、リストではなくboo/1を参照して」
です。foo/1としたのは間違い。
です。foo/1としたのは間違い。
835デフォルトの名無しさん
2016/09/21(水) 21:43:10.85ID:fpeK+m+E もし + が述語だったら is(A, 1 + 1) は高階述語だったかも?
でも実際は高階述語などではなくただのパターンマッチでいい
でも実際は高階述語などではなくただのパターンマッチでいい
836デフォルトの名無しさん
2016/09/24(土) 05:37:08.07ID:nvb+KqdK Prologだけ機械学習の波に乗れてない……
837デフォルトの名無しさん
2016/09/24(土) 05:50:29.45ID:oYgGfkv1 波に乗るっつうかバックにそういうシステムを置くフロントエンドになるだけじゃね
838デフォルトの名無しさん
2016/09/26(月) 14:53:21.88ID:8iOhZhP3839デフォルトの名無しさん
2016/09/26(月) 16:11:02.20ID:aAF0yNwh prologで微分の導関数(derivative)を求めるというプログラムがネットで幾つかヒットして参考になるのですが、どれも式変換したあとの簡略化をしっかり行っていない(不十分だったりまったくやっていない)
簡略化(例:因数分解→分母分子で同じ部分探して約分)のプログラムやアルゴリズムに関して解説した記事などをご存じの方はいますか?
簡略化(例:因数分解→分母分子で同じ部分探して約分)のプログラムやアルゴリズムに関して解説した記事などをご存じの方はいますか?
840デフォルトの名無しさん
2016/09/26(月) 20:18:06.76ID:IYYjmJRF >>839
記事ではなくて書籍であれば、以下の22章にコード付きの解説がある
・Prologの技芸 : Leon Sterling, Ehud Shapiro, 松田 利夫
https://www.amazon.co.jp/dp/4320097106
章冒頭の概要と詳細目次を書いておく
第22章 方程式を解くプログラム
Prologの応用分野として、極めて自然な分野が記号処理である。
例えば、典型的な記号処理の問題である記号微分のPrologプログラムは、
プログラム3,29に示すように、微分規則を違う構文法で記述したものにすぎない。
本章では、記号方程式を解くプログラムを示す。これは、エジンバラ大学
人工知能学科数理推論研究グループによって開発されたPRESS(PRolog
Equation Solving System)の簡易板である。PRESSは、高校の最高学年の
生徒程度の数学の能力を持つ。
本章の構成は以下の通りである。最初の節では、解法例を示して、方程式の
解法の概要を説明する。残りの4節では、方程式を解くプログラムに実現されている
4つの主要な解法について述べる。
22.1 方程式の解法の概要
22,2 因数分解
22,3 孤立化
22,4 多項式
22.5 同次化
22.6 背景
記事ではなくて書籍であれば、以下の22章にコード付きの解説がある
・Prologの技芸 : Leon Sterling, Ehud Shapiro, 松田 利夫
https://www.amazon.co.jp/dp/4320097106
章冒頭の概要と詳細目次を書いておく
第22章 方程式を解くプログラム
Prologの応用分野として、極めて自然な分野が記号処理である。
例えば、典型的な記号処理の問題である記号微分のPrologプログラムは、
プログラム3,29に示すように、微分規則を違う構文法で記述したものにすぎない。
本章では、記号方程式を解くプログラムを示す。これは、エジンバラ大学
人工知能学科数理推論研究グループによって開発されたPRESS(PRolog
Equation Solving System)の簡易板である。PRESSは、高校の最高学年の
生徒程度の数学の能力を持つ。
本章の構成は以下の通りである。最初の節では、解法例を示して、方程式の
解法の概要を説明する。残りの4節では、方程式を解くプログラムに実現されている
4つの主要な解法について述べる。
22.1 方程式の解法の概要
22,2 因数分解
22,3 孤立化
22,4 多項式
22.5 同次化
22.6 背景
841839
2016/09/28(水) 10:01:23.90ID:6gs0Qv+W >>840
ありがとうございます。該当の文献の英語版を読んでいるのですが多分因数分解は以下のコードだと思います。古い本で→や\等の記号が用いられており勝手に以下と解釈しました。
→ … :-
\ … 差分リスト
↑ … ^
subterm(Term,Term).
subterm(Sub,Term):-compound(Term),functor(Term,F,N),subterm(N,Sub,Term).
subterm(N,Sub,Term):-N>1,N1 is N-1,subterm(N1,Sub,Term).
subterm(N,Sub,Term):-arg(N,Term,Arg),subterm(Sub,Arg).
factorize(A*B,X,[Factors-Rest]):-!,factorize(A,X,[Factors-Factors1]),factorize(B,X,[Factors1,Rest]).
factorize(C,X,[[C|Factors],Factors]):-subterm(X,C),!.
factorize(C,X,[Factors,Factors]).
実行結果は以下となり、うまく因数分解できないのですが、どうすればよいかわかりますか?
1 ?- subterm(X,a*b*(c-d/e)^f).
X = a*b* (c-d/e)^f ;
X = a*b ;
X = a ;
X = b ;
X = (c-d/e)^f ;
X = c-d/e ;
X = c ;
X = d/e ;
X = d ;
X = e ;
X = f ;
false.
4 ?- factorize(x^2+4*x+4,A,x+2).
false.
5 ?- factorize(x^2+4*x+4,A,B).
A = x^2+4*x+4,
B = [[x^2+4*x+4|_G1609], _G1609].
ありがとうございます。該当の文献の英語版を読んでいるのですが多分因数分解は以下のコードだと思います。古い本で→や\等の記号が用いられており勝手に以下と解釈しました。
→ … :-
\ … 差分リスト
↑ … ^
subterm(Term,Term).
subterm(Sub,Term):-compound(Term),functor(Term,F,N),subterm(N,Sub,Term).
subterm(N,Sub,Term):-N>1,N1 is N-1,subterm(N1,Sub,Term).
subterm(N,Sub,Term):-arg(N,Term,Arg),subterm(Sub,Arg).
factorize(A*B,X,[Factors-Rest]):-!,factorize(A,X,[Factors-Factors1]),factorize(B,X,[Factors1,Rest]).
factorize(C,X,[[C|Factors],Factors]):-subterm(X,C),!.
factorize(C,X,[Factors,Factors]).
実行結果は以下となり、うまく因数分解できないのですが、どうすればよいかわかりますか?
1 ?- subterm(X,a*b*(c-d/e)^f).
X = a*b* (c-d/e)^f ;
X = a*b ;
X = a ;
X = b ;
X = (c-d/e)^f ;
X = c-d/e ;
X = c ;
X = d/e ;
X = d ;
X = e ;
X = f ;
false.
4 ?- factorize(x^2+4*x+4,A,x+2).
false.
5 ?- factorize(x^2+4*x+4,A,B).
A = x^2+4*x+4,
B = [[x^2+4*x+4|_G1609], _G1609].
842839
2016/09/28(水) 10:16:30.93ID:6gs0Qv+W すみません差分リストのとこ[Factors-Rest]と[Factors,Rest]が混在してまちがってましたが
[Factors,Rest]の形式に統一しても同じエラーでした。
多分すでに式がA*Bの形式になっている前提で書かれているコードのような…
x^2+4^x+4 → (x+2)^2 の形式には変換できなそうですね。
[Factors,Rest]の形式に統一しても同じエラーでした。
多分すでに式がA*Bの形式になっている前提で書かれているコードのような…
x^2+4^x+4 → (x+2)^2 の形式には変換できなそうですね。
843デフォルトの名無しさん
2016/11/17(木) 10:52:19.73ID:u2Ucvcf0 >>70
SWI-Prologだと、read_line_to_codes/2というような述語があります。第一引数に
ストリームがきます。
?- read_line_to_codes(user_input,X).
: qaz
X = [113, 97, 122].
となります。
get_line(Stream,Line) :-
read_line_to_codes(Stream,L),
atom_codes(Line,L).
という簡単な定義でピリオドなし入力を定義できます。
SWI-Prologだと、read_line_to_codes/2というような述語があります。第一引数に
ストリームがきます。
?- read_line_to_codes(user_input,X).
: qaz
X = [113, 97, 122].
となります。
get_line(Stream,Line) :-
read_line_to_codes(Stream,L),
atom_codes(Line,L).
という簡単な定義でピリオドなし入力を定義できます。
844デフォルトの名無しさん
2016/12/03(土) 10:33:29.10ID:z6/kqn1c 実は多くのプログラマが最初は read を使ってデータ入力するプログラムを
書くのですが、実際に利用する人たちに拒否されます。それで、この
get_line のような行入力が必要になるのですが、get_char を使って再帰的に
述語を書くのことはハードルとなります。それでこの read_line_to_code の
ような述語があるのであれば、広く知らしてあげる必要があります。
書くのですが、実際に利用する人たちに拒否されます。それで、この
get_line のような行入力が必要になるのですが、get_char を使って再帰的に
述語を書くのことはハードルとなります。それでこの read_line_to_code の
ような述語があるのであれば、広く知らしてあげる必要があります。
845デフォルトの名無しさん
2016/12/03(土) 13:28:23.04ID:YH7aKbNh846デフォルトの名無しさん
2016/12/03(土) 14:44:47.05ID:rctUeRlC >>845
ライブラリというと、readln/1 というのがあるにはある。
?- readln(X).
:| abc
X = [abc].
で一見うまくいく。ところが
?- readln(X).
:| abc def
X = [abc,dec].
と余計なことをしてしまう。全体をアトムとして欲しいわけです。
それで使われない。
ライブラリというと、readln/1 というのがあるにはある。
?- readln(X).
:| abc
X = [abc].
で一見うまくいく。ところが
?- readln(X).
:| abc def
X = [abc,dec].
と余計なことをしてしまう。全体をアトムとして欲しいわけです。
それで使われない。
847デフォルトの名無しさん
2016/12/04(日) 05:31:31.27ID:q5ZWXjRo848デフォルトの名無しさん
2016/12/04(日) 20:17:09.28ID:q5ZWXjRo SWI-Prologに関する限り、入力よりも出力の方が変というか使いにくい。
format述語のことだけれど。
format述語のことだけれど。
849デフォルトの名無しさん
2016/12/05(月) 20:24:12.86ID:MLt2Eg7b SWI-Prologの問題を超えて、この処理系のマニュアルが改善
されれば、Prologはもっと普及すると思う。
あまりにも、個々の実例が少なすぎる。多くのプログラマは
実例を見比べてその違いから、問題を理解するという方法を
身に付けているが、その方法に沿った資料に全くなっていない。
SWI-Prologが現在のPrologを代表するものに成長しているの
だから、この部分に人を割いて欲しい。
されれば、Prologはもっと普及すると思う。
あまりにも、個々の実例が少なすぎる。多くのプログラマは
実例を見比べてその違いから、問題を理解するという方法を
身に付けているが、その方法に沿った資料に全くなっていない。
SWI-Prologが現在のPrologを代表するものに成長しているの
だから、この部分に人を割いて欲しい。
850デフォルトの名無しさん
2016/12/11(日) 00:28:21.45ID:JXdY8Uy9 そこまでPrologに肩入れする理由は何?
851デフォルトの名無しさん
2016/12/16(金) 12:14:52.67ID:tlYBnfBK >>846
atom_concatつかうのはどうですか?
9 ?- readln(X),X=[First|[Rest]],atom_concat(First,Rest,Out).
|: abc def
X = [abc, def],
First = abc,
Rest = def,
Out = abcdef.
atom_concatつかうのはどうですか?
9 ?- readln(X),X=[First|[Rest]],atom_concat(First,Rest,Out).
|: abc def
X = [abc, def],
First = abc,
Rest = def,
Out = abcdef.
852デフォルトの名無しさん
2016/12/16(金) 16:28:14.37ID:JsK6rGFf >>851
ありがとうございます。
基本的にそれでうまく行くことも多いのだけれど、
入力したままの文字列にならないという点で具合が悪い。空白が必ずひとつならば、
atomic_list_concat(X,' ',Out),
良いのだが、そうとは限らない。
ありがとうございます。
基本的にそれでうまく行くことも多いのだけれど、
入力したままの文字列にならないという点で具合が悪い。空白が必ずひとつならば、
atomic_list_concat(X,' ',Out),
良いのだが、そうとは限らない。
853デフォルトの名無しさん
2016/12/16(金) 17:19:33.35ID:wFVtPzZ+854デフォルトの名無しさん
2016/12/19(月) 17:20:34.24ID:HSp2u2Qk >>850
他の言語には難しい表現が可能になるから。
他の言語には難しい表現が可能になるから。
855デフォルトの名無しさん
2016/12/22(木) 23:10:05.00ID:LlPiHmas Lispの演習でユニフィケーションを実装すると、Prologがクセになる
マジおすすめ
マジおすすめ
856デフォルトの名無しさん
2017/01/22(日) 05:48:37.87ID:2Nn7VwOW 昨日ツイッターで出てきた。
即是(色,空).
という定義。これひとつで、
空 色
即 即
是 是
色 空
を満たしているのではないかと。
即是(色,空).
という定義。これひとつで、
空 色
即 即
是 是
色 空
を満たしているのではないかと。
857デフォルトの名無しさん
2017/01/22(日) 06:07:17.17ID:2Nn7VwOW Tiobe Index for January 2017 Very Long Term History
Programming Language 2017 2012 2007 2002 1997 1992 1987
Java 1 1 1 2 17 - -
C 2 2 2 1 1 1 1
C++ 3 3 3 3 2 2 4
C# 4 4 6 10 - - -
Python 5 7 7 16 27 - -
PHP 6 5 4 6 - - -
JavaScript 7 9 8 7 20 - -
Visual Basic .NET 8 24 - - - - -
Perl 9 8 5 4 3 - -
Assembly language 10 - - - - - -
Lisp 28 12 12 9 7 11 2
Ada 30 15 16 15 10 3 13
Prolog 33 43 27 27 14 9 3
Prologもメジャーだった。
Programming Language 2017 2012 2007 2002 1997 1992 1987
Java 1 1 1 2 17 - -
C 2 2 2 1 1 1 1
C++ 3 3 3 3 2 2 4
C# 4 4 6 10 - - -
Python 5 7 7 16 27 - -
PHP 6 5 4 6 - - -
JavaScript 7 9 8 7 20 - -
Visual Basic .NET 8 24 - - - - -
Perl 9 8 5 4 3 - -
Assembly language 10 - - - - - -
Lisp 28 12 12 9 7 11 2
Ada 30 15 16 15 10 3 13
Prolog 33 43 27 27 14 9 3
Prologもメジャーだった。
858デフォルトの名無しさん
2017/01/23(月) 18:21:28.72ID:ldBFD7Ci859デフォルトの名無しさん
2017/02/02(木) 09:31:31.52ID:iNuMzBgW860859
2017/02/02(木) 09:33:43.86ID:iNuMzBgW ごめんなさい。
行入力(_行) :- readline_to_codes(current_input,Codes),atom_codes(_行,Codes).
です。
行入力(_行) :- readline_to_codes(current_input,Codes),atom_codes(_行,Codes).
です。
861デフォルトの名無しさん
2017/02/02(木) 09:40:23.12ID:zsLWsToR862デフォルトの名無しさん
2017/02/02(木) 09:44:53.78ID:iNuMzBgW863デフォルトの名無しさん
2017/02/02(木) 09:48:41.37ID:iNuMzBgW ところで、
『Prologでまったり』スレ
復活したいですね。
『Prologでまったり』スレ
復活したいですね。
864デフォルトの名無しさん
2017/02/02(木) 17:03:13.44ID:vNnAnK3G Alephなどの帰納論理ライブラリ使ってる方はいるんだろうか。話聞いてみたい。
865デフォルトの名無しさん
2017/02/06(月) 11:47:26.15ID:zsAHJXs9866デフォルトの名無しさん
2017/02/06(月) 18:10:43.59ID:rCI9uCRE867デフォルトの名無しさん
2017/02/07(火) 18:24:31.96ID:s4l5/kyE 最近Stringが使われているコードあまり見なくなりましたね。
関数名、述語名もアトムですから。アトムとして処理したいです。
sub_atom/5やatom_concat/3が強力であることもあって、文字コードが
出る幕はなくなったということでしょう。
read_line・・・ については何故かどちらも文字コードが来るのですが。
関数名、述語名もアトムですから。アトムとして処理したいです。
sub_atom/5やatom_concat/3が強力であることもあって、文字コードが
出る幕はなくなったということでしょう。
read_line・・・ については何故かどちらも文字コードが来るのですが。
868867
2017/02/07(火) 18:26:48.89ID:s4l5/kyE read_line_to_chars/2でよいと思うのですが何故_to_codesしかないのでしょうか。
869デフォルトの名無しさん
2017/02/08(水) 08:17:30.17ID:ic0Hb1Oc なぜ、Prologの世界で、これを標準ライブラリ化しなかったのか。
そのことの理解が必要なんだろうけれど。以下はどうしても必要だろう。
行入力(_入力ストリーム,_行) :-
read_line_to_code(_入力ストリーム,Codes),
atom_codes(_行,Codes).
そのことの理解が必要なんだろうけれど。以下はどうしても必要だろう。
行入力(_入力ストリーム,_行) :-
read_line_to_code(_入力ストリーム,Codes),
atom_codes(_行,Codes).
870デフォルトの名無しさん
2017/02/13(月) 13:15:20.36ID:Bz9CPtSy >>865
はい、Alephはprologで書かれています。
http://www.cs.ox.ac.uk/activities/machinelearning/Aleph/aleph
自分は「Prolog Programming for Artificial Intelligence 4th Edition」の
Inductive Logic Programing(帰納論理プログラミング)の記事を読んで興味を持ったのですが、
この本で紹介されているコードを大分レベルアップしたのがAlephやProgolのように感じました。
自分もまだ勉強中ですが、例えば以下の問題など興味深いです。
has_daughter述語の学習
parent(X,Y):XはYの親、 female(X):Xは女性、という既存の述語があったとして、
has_daughter(X)というボディ部不明の述語があり、
これを満たす例、満たさない例をたくさん与えると、
has_daughterのボディ部の内容の仮定を生成する
列車のeastbound-westbound問題(有名な問題のようです)
これこれの構成で積荷がこれこれの列車は東行き、これこれだと西行きという事例を沢山学習させ、
任意の構成の列車を入力するとそれが西行きか東行きかを生成した仮定を用いて判定する
はい、Alephはprologで書かれています。
http://www.cs.ox.ac.uk/activities/machinelearning/Aleph/aleph
自分は「Prolog Programming for Artificial Intelligence 4th Edition」の
Inductive Logic Programing(帰納論理プログラミング)の記事を読んで興味を持ったのですが、
この本で紹介されているコードを大分レベルアップしたのがAlephやProgolのように感じました。
自分もまだ勉強中ですが、例えば以下の問題など興味深いです。
has_daughter述語の学習
parent(X,Y):XはYの親、 female(X):Xは女性、という既存の述語があったとして、
has_daughter(X)というボディ部不明の述語があり、
これを満たす例、満たさない例をたくさん与えると、
has_daughterのボディ部の内容の仮定を生成する
列車のeastbound-westbound問題(有名な問題のようです)
これこれの構成で積荷がこれこれの列車は東行き、これこれだと西行きという事例を沢山学習させ、
任意の構成の列車を入力するとそれが西行きか東行きかを生成した仮定を用いて判定する
871デフォルトの名無しさん
2017/02/15(水) 19:36:40.66ID:Hii7olK0 >>865
ちょっと遅くなりました。帰納論理プログラミングについては、魅力的ですし、
将来、重要な地歩を占めるものと、予感しています。Progolについては、
大量に現れる節の可能性を上手く排除できず、中断状態になったままです。
この機会にAlephやってみます。どうも有難うございました。
ちょっと遅くなりました。帰納論理プログラミングについては、魅力的ですし、
将来、重要な地歩を占めるものと、予感しています。Progolについては、
大量に現れる節の可能性を上手く排除できず、中断状態になったままです。
この機会にAlephやってみます。どうも有難うございました。
873デフォルトの名無しさん
2017/02/16(木) 11:41:51.71ID:sX4bqSJb 何で急にprolog流行り出したの?
874870
2017/02/16(木) 12:18:29.03ID:wak87cl1 >>873
自分はProlog大好きなのですが全然流行っていないような…情報集めもメッチャ苦労しますし…
Prologの基本文法以外の、論文とかでしかあまり目にしない「応用Prolog」みたいな領域があって「日本ではあまり目立たなかったけど実は少しづつ進化していた」というのはあると思います。
日本語で目にするPrologの基本文法レベルの情報と外国で見つかる応用Prologの情報には大分差があるというのはあると思います。
文法にも大分手が入っている印象です
自分はProlog大好きなのですが全然流行っていないような…情報集めもメッチャ苦労しますし…
Prologの基本文法以外の、論文とかでしかあまり目にしない「応用Prolog」みたいな領域があって「日本ではあまり目立たなかったけど実は少しづつ進化していた」というのはあると思います。
日本語で目にするPrologの基本文法レベルの情報と外国で見つかる応用Prologの情報には大分差があるというのはあると思います。
文法にも大分手が入っている印象です
875デフォルトの名無しさん
2017/02/16(木) 21:41:14.28ID:Ip3bwl24 >>873
どっかの大学で処理系作る演習課題を出したのでは
どっかの大学で処理系作る演習課題を出したのでは
876デフォルトの名無しさん
2017/02/16(木) 23:14:34.57ID:suS7noGe877デフォルトの名無しさん
2017/02/17(金) 00:34:53.19ID:nT+0Ed8G Prologって、第5世代コンピュータをつくるとかいって、ICOTという組織を
作って大々的に研究していたのじゃなかったかな。
ICOTの成果というものは、発表さいているのかしら。
作って大々的に研究していたのじゃなかったかな。
ICOTの成果というものは、発表さいているのかしら。
878デフォルトの名無しさん
2017/02/17(金) 03:22:48.78ID:td9uOFbw 発表されてたはずで、
https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%BA%94%E4%B8%96%E4%BB%A3%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF
の外部リンク
AITEC・ICOTアーカイブス
第五世代コンピュータ プロジェクト アーカイブ
の先にあったのだと思うけど今では 403 Forbidden と 404 Not Found
これは残ってた
第五世代コンピュータ・プロジェクト
最終評価報告書
http://www.jipdec.or.jp/archives/publications/J0005062
https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%BA%94%E4%B8%96%E4%BB%A3%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF
の外部リンク
AITEC・ICOTアーカイブス
第五世代コンピュータ プロジェクト アーカイブ
の先にあったのだと思うけど今では 403 Forbidden と 404 Not Found
これは残ってた
第五世代コンピュータ・プロジェクト
最終評価報告書
http://www.jipdec.or.jp/archives/publications/J0005062
879デフォルトの名無しさん
2017/02/17(金) 05:29:01.81ID:zgDgwzIu >>877-878
プロジェクトの遺産であるKLICはメンテナンスされている。
並行論理プログラミング (KLIC version 3.01)
http://www.ueda.info.waseda.ac.jp/software-j.html
けいえるわん
http://www.ueda.info.waseda.ac.jp/~takagi/kl1/
並列論理型言語処理系 KLIC のページ
http://web.archive.org/web/20100815015107/http://www.klic.org/software/klic/index.ja.html
第五世代コンピュータ プロジェクト アーカイブ
http://web.archive.org/web/20150121033015/http://www.jipdec.or.jp/archives/icot/ARCHIVE/HomePage-J.html
プロジェクトの遺産であるKLICはメンテナンスされている。
並行論理プログラミング (KLIC version 3.01)
http://www.ueda.info.waseda.ac.jp/software-j.html
けいえるわん
http://www.ueda.info.waseda.ac.jp/~takagi/kl1/
並列論理型言語処理系 KLIC のページ
http://web.archive.org/web/20100815015107/http://www.klic.org/software/klic/index.ja.html
第五世代コンピュータ プロジェクト アーカイブ
http://web.archive.org/web/20150121033015/http://www.jipdec.or.jp/archives/icot/ARCHIVE/HomePage-J.html
881デフォルトの名無しさん
2017/02/17(金) 15:48:47.57ID:ovwqcfrF 残念…
https://ja.wikipedia.org/wiki/Prolog
>Prolog にオブジェクト指向プログラミングを取り入れた ESP
(略)
>ESPは多重継承を特徴とする当時としては先鋭のオブジェクト指向言語であった
(略)
>ISO の標準化作業は1987年頃から作業委員会(WG17)が作られ、
>日本委員も情報処理学会から15名ほどがこれに加わった。
(略)
>モジュール仕様については日本委員から、ICOTによって作成された
>ESP(Extended Self-contained Prolog)を以てその標準とする案が出されていたが、
>これは否決された。
https://ja.wikipedia.org/wiki/Prolog
>Prolog にオブジェクト指向プログラミングを取り入れた ESP
(略)
>ESPは多重継承を特徴とする当時としては先鋭のオブジェクト指向言語であった
(略)
>ISO の標準化作業は1987年頃から作業委員会(WG17)が作られ、
>日本委員も情報処理学会から15名ほどがこれに加わった。
(略)
>モジュール仕様については日本委員から、ICOTによって作成された
>ESP(Extended Self-contained Prolog)を以てその標準とする案が出されていたが、
>これは否決された。
882デフォルトの名無しさん
2017/03/08(水) 01:37:14.82ID:FH5JSwpU http://qiita.com/ShunIchikawa/items/6449f492dc38a7201162
pepperの頭脳がprologで書かれていたなんて
pepperの頭脳がprologで書かれていたなんて
883デフォルトの名無しさん
2017/03/20(月) 14:40:29.09ID:D+qAvvKH884デフォルトの名無しさん
2017/03/21(火) 02:02:37.80ID:1B8bXLyp 今のままでは、小学校のプログラミング教育にScratchが導入されてしまう。
Prologを推すことができるように、
小学生の目線で書いたPrologプログラムを増やそう。
Prologを推すことができるように、
小学生の目線で書いたPrologプログラムを増やそう。
885デフォルトの名無しさん
2017/03/21(火) 02:08:37.78ID:1B8bXLyp 基本的な方針としては、
道具立てなく、現在の授業科目の中ですぐに利用できるプログラム言語で
あることを武器として、広めていく。
もちろん、環境整備は必要だし、Prologの言語仕様の一部変更も必要には
なるだろう。
道具立てなく、現在の授業科目の中ですぐに利用できるプログラム言語で
あることを武器として、広めていく。
もちろん、環境整備は必要だし、Prologの言語仕様の一部変更も必要には
なるだろう。
886デフォルトの名無しさん
2017/03/25(土) 04:56:52.06ID:GDunSt8n887デフォルトの名無しさん
2017/03/26(日) 18:38:57.42ID:AnJi4Uz+888887
2017/03/26(日) 18:41:31.41ID:AnJi4Uz+ 訂正。
・・・・・・・
それを補う部分の記述が必要。その部分では最有力ということではないか。
・・・・・・・
それを補う部分の記述が必要。その部分では最有力ということではないか。
889デフォルトの名無しさん
2017/03/27(月) 09:23:14.55ID:0S3+JQEx >>886
読み書きしにくいの意味が、データの入出力のことなら別だけれど
プログラムの読みやすさ、書きやすさの意味だとすると、
Prologはもっとも読みやすいプログラム言語のひとつではないか
書く方は、難しいという見方もできるだろうが
読み書きしにくいの意味が、データの入出力のことなら別だけれど
プログラムの読みやすさ、書きやすさの意味だとすると、
Prologはもっとも読みやすいプログラム言語のひとつではないか
書く方は、難しいという見方もできるだろうが
890デフォルトの名無しさん
2017/03/31(金) 12:48:26.56ID:9hE01YVS >>887
その部分では関数型言語も手続型言語もオブジェクト指向が強調されたものでも記述できるが、その記述の簡潔さでは、Prologは一頭地抜けている
その部分では関数型言語も手続型言語もオブジェクト指向が強調されたものでも記述できるが、その記述の簡潔さでは、Prologは一頭地抜けている
891デフォルトの名無しさん
2017/03/31(金) 16:20:13.33ID:Xm1Y4uex892891
2017/03/31(金) 16:21:47.69ID:Xm1Y4uex 「ニューラルネットワーク的AIを統制するためのPrologプログラミング」かな。
893デフォルトの名無しさん
2017/04/09(日) 08:47:47.54ID:w11Bnd9f Emacsでプログラム書いてますか?設定の参考になるサイトとかないでしょうか
894デフォルトの名無しさん
2017/06/15(木) 07:05:22.75ID:OS4b1hKm Prologでデータベース foo/1 の引数値を集約するときに
?- findall(N,foo(N),L),sum_list(N,Sum).
というように書きます。これを
?- findall(Sum_1,(
findnsols(1000,N,foo(N),L1),
sum_list(L1,Sum_1)),L2),
sum_list(L2,Sum).
というように書くとスタックの消費を抑えることがてきます。
?- findall(N,foo(N),L),sum_list(N,Sum).
というように書きます。これを
?- findall(Sum_1,(
findnsols(1000,N,foo(N),L1),
sum_list(L1,Sum_1)),L2),
sum_list(L2,Sum).
というように書くとスタックの消費を抑えることがてきます。
895デフォルトの名無しさん
2017/06/20(火) 18:05:00.63ID:K8Mc93da896デフォルトの名無しさん
2017/06/23(金) 08:01:15.35ID:oZciV1Hy そうそうProlog読み書きしにくいから
基本はPythonメインで
論理プログラムがハマるところに
Prolog使いたいよね
でも連携というかそもそも
Prolog自体の情報が少ない
基本はPythonメインで
論理プログラムがハマるところに
Prolog使いたいよね
でも連携というかそもそも
Prolog自体の情報が少ない
897デフォルトの名無しさん
2017/06/25(日) 17:00:13.26ID:NUFQhX60 人工知能ということになるとPrologは述語論理を担うなどと大仰な
ことになるが、もっと単純に、
自分はこういうことを望む。
これこれのことはするな。
というように比較的単純なしかしどうしても欠かせない情報を
確実に表現するためのもの。Pythonよりさらに簡素な記述系を
最大限に使い込もう。
ことになるが、もっと単純に、
自分はこういうことを望む。
これこれのことはするな。
というように比較的単純なしかしどうしても欠かせない情報を
確実に表現するためのもの。Pythonよりさらに簡素な記述系を
最大限に使い込もう。
898デフォルトの名無しさん
2017/06/27(火) 11:15:02.78ID:TURdRN9F 実行系をさらにその上位で制御するという役割にPrologのようなプログラム言語は当てられてよいはずだが<
案外とそういうコードがない。GeneXusなどもそういう切り口を残すべきだったのだろうけれど、現在のところそうなっていない。
案外とそういうコードがない。GeneXusなどもそういう切り口を残すべきだったのだろうけれど、現在のところそうなっていない。
899デフォルトの名無しさん
2017/06/27(火) 22:09:52.04ID:yIuIIYT1 Prologは宣言型なので
Pythonなどの命令型言語よりさらに高水準だから
システム最上位の制御にふさわしい……
って理屈は分かるけど
実際にはそういう使われ方で普及してないよね?
関数型言語よりもっと簡潔だけどもっと難しいんじゃ
やっぱ日常的に使いにくいんだと思う
Pythonなどの命令型言語よりさらに高水準だから
システム最上位の制御にふさわしい……
って理屈は分かるけど
実際にはそういう使われ方で普及してないよね?
関数型言語よりもっと簡潔だけどもっと難しいんじゃ
やっぱ日常的に使いにくいんだと思う
900デフォルトの名無しさん
2017/07/02(日) 09:20:29.55ID:+SxSuJIi >>899
どこも使い難い点はないような
どこも使い難い点はないような
901デフォルトの名無しさん
2017/07/03(月) 05:36:37.05ID:JEoPVY0x >>900
それ、使い込んだ上での話ですか
それ、使い込んだ上での話ですか
902デフォルトの名無しさん
2017/07/03(月) 07:01:23.77ID:6QSWtKdI >>896
ディープラーニンングは一過性ではなく持続しそうだから今後益々
数値計算依存部分はPytho、シンボル依存部分はPrologの切り分けが
進む。メインはPrologではあるが、スクリプト的なものが多くなる。
ディープラーニンングは一過性ではなく持続しそうだから今後益々
数値計算依存部分はPytho、シンボル依存部分はPrologの切り分けが
進む。メインはPrologではあるが、スクリプト的なものが多くなる。
903デフォルトの名無しさん
2017/08/02(水) 12:14:45.53ID:AyM7Pnm7 >>900
PrologとPythonなどとの連携部分はまだ課題が多い。
単に呼べるというのでは不十分で、「簡単にどのライブラリ間でもいじること無く呼べる」必要がある。
例えば、C++がいま一つ敬遠される理由はこの連携が弱い(ABIが乱立)からだし。
まあこの手の問題は、糊(glue)機能が比較的優れてるLispでも抱えてる問題ではあるが。
PrologとPythonなどとの連携部分はまだ課題が多い。
単に呼べるというのでは不十分で、「簡単にどのライブラリ間でもいじること無く呼べる」必要がある。
例えば、C++がいま一つ敬遠される理由はこの連携が弱い(ABIが乱立)からだし。
まあこの手の問題は、糊(glue)機能が比較的優れてるLispでも抱えてる問題ではあるが。
904デフォルトの名無しさん
2017/11/07(火) 17:33:56.45ID:cG+teg8q 904
905デフォルトの名無しさん
2017/11/07(火) 17:34:27.71ID:cG+teg8q 905
906デフォルトの名無しさん
2017/11/07(火) 17:34:59.61ID:cG+teg8q 906
907デフォルトの名無しさん
2017/11/07(火) 17:35:31.12ID:cG+teg8q 907
908デフォルトの名無しさん
2017/11/07(火) 17:36:01.37ID:cG+teg8q 908
909デフォルトの名無しさん
2017/11/07(火) 17:36:30.51ID:cG+teg8q 909
910デフォルトの名無しさん
2017/11/07(火) 17:37:00.33ID:cG+teg8q 910
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 [蚤の市★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★3 [蚤の市★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 日本人の間で脱税がブーム 所得税の追徴課税額1400億円超、過去最高 [402859164]
- 女の子集合!
- 今年の漢字、きょう発表😉 [583597859]
- 中国人、超ド正論。「チベットやウイグルに住んでるのはチベット族やウイグル族だが、アイヌから奪った土地に住んでる日本人こそ侵略者」 [314039747]
- 百合営業してるアイドル「これは営業だから…んっクチュクチュ」←これ
- 【悲報】メモリだけでなくSSDも値上がりがはじまる♥
