【論理】Prolog【初心者】

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2010/11/06(土) 13:00:56
Prolog初心者のスレ

これは良い言語だ…
252250
垢版 |
2011/09/07(水) 19:29:25.63
>>251
丁寧な回答ありがとうございます。
確かにエンコードなんかで大量のデータをランダムに走査するとか不得意そうですね。

100倍程度なら何とか許容出来るのかもしれません。
ただ、ユニフィケーションの実際の動作が見えないのが気になるんです。
現在の処理系では検索用のヒントみたいなのは指定出来ないと言う事ですよね?少し不安です。
全体で100万件位の事実を想定しているもので。

ユニフィケーションの速度を上げたいのですが、
事実を分割して該当しそうなもののみ指定して検索させるとか可能でしょうか?
(デーブルを分割する様なイメージです)
グループ分けの規則を介する事になってかえって遅くなったりします?
2011/09/07(水) 20:17:55.44
>>252
PSI(新世代コンピュータ開発機構が開発したPrologマシン)では
確か、第一引数にハッシュでインデックスが自動付加されたように
記憶していますが、その程度のものはコンパイラにはあると思います。
しかし、全ての引数にBtreeに類するインデックスを設定できる
コンパイラはないのではないか。
254250
垢版 |
2011/09/07(水) 21:39:48.53
>>253
ありがとうございます。
とすると件数を絞れる様なものを第一引数にすると良いと言う事ですね。
考慮してみます。
2011/09/13(火) 00:06:34.91
Prologを極めることによって、ディベートに強くなれますか?
2011/09/13(火) 00:18:33.33
NO
2011/09/13(火) 00:21:14.76
Prologを極めると友達が一人もいなくなります
2011/09/13(火) 00:23:26.60
むしろPrologがお友達になります
2011/09/14(水) 01:28:33.81
Prolog極めてないのに友達がいないのですがどうすればいいですか?
2011/09/14(水) 01:36:13.38
ロンリープログラミングですね。わかりますん
2011/09/20(火) 07:51:09.68
>>259
定義する他ありませんね。
友達.
友達.
友達.
2011/09/20(火) 08:03:20.00
最近、うちの子がパソコンを眺めて「ともだち…ともだち…ウヘ」と独り言ちているのですが、どうしたらいいでしょうか。
2011/09/20(火) 11:25:37.87
友達を蹴ったり、食べたりしないように注意しとけ
2011/10/06(木) 20:49:10.98
すげー今更だけど、
>>70
あたりで定義してる get_line って、
きょうびのProlog処理系だとこんな感じでいいと思う

get_line(Line):-
  findall(C,(
    repeat,
    get_char(C),
    (C=='\r' -> fail
    ;C=='\n' -> !,fail
    ;true)
   ),Chars),
  atom_chars(Line,Chars).

あんまり論理プログラミングっぽくはないが
265264
垢版 |
2011/10/06(木) 21:07:32.12
あと、ストリーム指定付きを作るなら、ストリーム指定付きを定義して、
ストリーム指定なしから呼び出すようにしたほうががスマート

get_line(Line):- current_input(Stream), get_line(Stream,Line).

get_line(Stream,Line):-
    〜〜
    get_char(Stream,C),
    〜〜

current_input/1 が無ければ seeing/1 でも使うべし
2011/10/07(金) 20:59:08.63
'\r'消しちゃうのはまずいような・・・
get_line(Line) :-
    findall(C, (
        repeat,
        get_char(C),
        (C = '\n', !, fail; true)), X),
    (append(Y, ['\r'], X), !; Y = X), atom_chars(Line, Y).
267264
垢版 |
2011/10/09(日) 21:23:06.10
>>266
標準入力かファイルからの入力で、一行読むとき、
キャリッジリターンが行中に出てくるシチュ、
それからもし出てきたとしてそれを生かしておく意味、
というのが想像つかないので、解説よろしくお願いしますっ
2011/10/10(月) 09:24:01.55
個人的に意味のない良いケースだから!って言って、
内容を勝手に改変しちゃうような処理に一般的な名前を付けちゃうのはどうかと思いますっ!
get_line_without_CRとでもしてはどうでしょうかっ
2011/10/10(月) 11:24:47.45
>>268
ISO標準になっていないこのような定義は、どんなものを標準的なライブラリに
加えればよいか、まだ手探りの状態ですから、このような細かな点を議論する
ことに意義があると思います。できるだけ、細部を反映するような述語名を
与えるべしとするのは卓見だと思います。
270264
垢版 |
2011/10/10(月) 18:46:18.46
なんかノリが変だ・・・
本当に、何か見落としがあるなら教えて欲しかったし、
煽ったつもりはなかったんだけど

自分のコードは、>>73 で追加されたCR無視などを参考に、
書き方を変えただけのものなのだが、
ちゃんと 'end_of_file' を扱っていないとかアウトだ・・・ゴメン

もし入出力として一般化したいなら、
一文字入力の時に改行コードがどうなるかの標準に照らして書く、
の一点だと思う。

が、標準がある項目についても沿っていない処理系も多いPrologなので、
現状、挙動にあわせて処理を書くしかないのでは?
そうなると、単体CRを改行扱いした方がいい環境や、
単体LFを改行扱いしてはいけない環境もありそうだが
271264
垢版 |
2011/10/10(月) 18:48:13.44
>どんなものを標準的なライブラリに加えればよいか
なんて議論の、末端にいる気持ちすらなかったし、
名前に拘りがある訳でももちろんなく、
get_line_without_CR は確かに実態に則した名前だと思うので、
そのような名前が必要な場合には各場で命名すればいいと思う。

ああ、必死だな、おれ
めっちゃ恥ずかしい

Prolog初心者スレって敷居高いな・・・
しばらくROMってます
272264=270
垢版 |
2011/10/10(月) 18:57:55.89
ROMってるとか言ってさっそくだけど、一文抜けてたので。

>現状、挙動にあわせて処理を書くしかないのでは?

という段落の次に、

「だから俺自身は、実務上必要そうな実装の雛形の一提案をしたつもりでしかなかったので」

を挟んで、

>>どんなものを標準的なライブラリに加えればよいか
>なんて議論の、末端にいる気持ちすらなかったし、

に続くつもり。
なんだか意味のない煽りにしか見えなかったのが、
言い訳がましく見えるようになる一文を加えさせていただいて、さようなら
2011/10/12(水) 10:53:53.39
'\n'か'\r'か'\r\n'という問題は、環境にあまりに依存するから、現在のところ、改行は'\n'のみ、
'\r'は一応アルファベット扱いするしかないと思う。
なぜかというと、

?- ・・・concat_atom([_行1,_行2,_行3],_区切り文字,_ファイル全体の文字列),

というような処理は日常的に存在する。完全に復元するには、行に分解した際の
改行コードがなんであったかをファイルごとに出力モード引数で取得して
保存しておかなくてはならないが、これはあまりにも煩雑。
行の中に'\r'や'\n'を含めるのは実務的にさらに不可。ということになります。
2011/10/18(火) 23:18:23.05
単純な好奇心なんだが、prologでクイックソートってどう書くの?
2011/10/18(火) 23:39:33.53
Wikipediaのプログラム例にあるよ
2011/10/19(水) 00:07:32.26
wikipediaとかしばらく見てなかった・・・
ありがとう
見てくる
2011/10/19(水) 00:24:36.08
haskellのリスト内包表記に相当する部分で複雑に見えてしまってますね・・・
(たぶん、リスト内包表記使わない方法だと同じくらいのコード量)

prologにはリスト内包表記に相当するものは無いのでしょうか?

NGNG?PLT(18001)
findall使えばWikipediaのやつよりはHaskellっぽくなるかも(´・ω・`)こんな感じ

quicksort([], []).
quicksort([H|T], Sorted) :-
findall(E, (member(E, T), E  @> H), GTs),
findall(E, (member(E, T), E @=< H), LEs),
quicksort(GTs, GTs2),
quicksort(LEs, LEs2),
append(LEs2, [H|GTs2], Sorted).
2011/10/19(水) 06:47:22.49
>>278
おお!!
ありがとうございます

アルゴリズムの読み易さは関数型言語と大差無いんじゃないかと言う予想は、当たってそうで安心しました
(私にはまだまだprologの文法に馴染めてませんが)
2011/10/22(土) 13:46:29.58
ええー、どう見たって関数型言語のほうがコードがシンプルじゃん…
2011/10/22(土) 14:02:35.00
>>280
partitionで分解する所がPrologの値打ちなんでね。
2011/10/22(土) 16:30:19.49
>>280
縦に長いか横に長いかの違いに見えるが。。。
283デフォルトの名無しさん
垢版 |
2011/10/22(土) 16:47:53.03
Prologの本領は
http://nojiriko.asia/prolog/quicksort_nihongo.html
のようなコードにあるので、関数型言語と比較するの適切ではない。
2011/10/22(土) 18:15:36.25
>>283
なかなか面白いページだな
http://nojiriko.asia/prolog/index.html
2011/10/22(土) 23:23:48.25
このfor/3を実装するのに、結構試行錯誤したわ
http://www.ifcomputer.com/IFProlog/Manuals/v4.1/reference/for/home_en.html

Prologって全然直感的じゃないな
2011/10/22(土) 23:51:13.94
>>285
これはC言語等の下劣な仕様に阿っているのが悪いのであって、
第二引数と第三引数を交換するだけで、
(分かりやすくするため 最終値 >= 初期値 のケースだけにする)

for(_初期値_式,_最終値_式, _カウンタ) :-
    _初期値_式 > _最終値_式,!,fail.
for(_初期値_式,_最終値_式, _カウンタ) :-
    _カウンタ is _初期値_式.
for(_初期値_式,_最終値_式, _カウンタ) :-
    _初期値_式_2 is _初期値_式 + 1,
    for(_初期値_式_2,_最終値_式, _カウンタ).

当たり前のPrologの述語となる。強いてちょっと
気持ち悪いのは第一節の !,fail. くらい。
2011/10/22(土) 23:59:17.38
>>285
直感的に書ける処理が手続き型とは根本的に違う、と考えたほうがいい
むしろ手続き型で書き辛い処理が書きやすい言語って感じるよ俺は
288286
垢版 |
2011/10/23(日) 00:10:58.32
一般にPrologでは

foo(S,E,X) :- の形式をとり、
Sはカウンタ、X でそれを取り出す。
Eは限界値を示す。
これで数値カウンタループ述語を構成する。

for/3は

repeat.
repeat :- repeat.

のrepeatパターンの述語。
member/2やappend/3もこのパターン。
どれも非決定性述語である。

member(A,[A|_]).
member(A,[_|R]) :- member(A,R).

append([],L,L).
append([U|X],Y,[U|Z]) :- append(X,Y,Z).

?- append(_,_,_), ・・・ とするとrepeatと同じ機能となる。
(ただし繰り返しが多くなるとスタックオーバーフローが起きるかも知れない)
289288
垢版 |
2011/10/23(日) 00:13:04.91
>>288
すみません。一番最後から二行目
?- append(_,_,_),・・

です。アンダースコアが飛んでしまった。
2011/10/23(日) 00:14:27.91
ありがちなミス

for(Lower,X,Upper) :-
Lower = X ; for(Lower+1,X,Upper).
2011/10/23(日) 00:19:43.74
>>287
そうですか。早くPrologの醍醐味が味わいたいっすね。
ちなみに俺のコードは、↓

% for(_初期値_式, _カウンタ, _最終値_式)
for(A, A, A) :- !.
for(A, A, _).
for(A, R, E) :- (A < E -> B is A + 1 ; B is A - 1), for(B, R, E).

やっていることは、>>286と近いんだろうけど、 かなり趣が異なる感じ…。
2011/10/23(日) 00:30:08.03
>>291
立派なコードだと思うけど。
2011/10/23(日) 03:56:31.01
>>285-292
素朴な疑問だが、間に処理を入れられるように見えないんだが・・・
(そもそも、繰り返しはPrologも再帰が基本だと思うんだが・・・)
2011/10/23(日) 04:32:16.76
>>293
ここでやってるforはCやJavaのforとは無関係で、Haskellの[from..to]みたいなもの。
処理は、
for(L,X,H), do(X,C).
みたいに書いて、最後にfailさせるかメタ述語で全解生成する。
Haskellなら[ do x | x <- [from..to]]だね。
2011/10/23(日) 04:51:07.54
>>294
そうなのか・・・
いまいちどういう結果が出るのか良くわからん・・・
2011/10/23(日) 07:21:02.39
>>293
数値を順に生成するもの。

?- for(1,N,3),write(a),N=3.
aaa

?- for(1,N,3),write(a),fail.
aaa
false

?- for(1,N,3),M is N * 2,write(M),nl,N=3.
2
4
6

?- for(1,N,3),M is N * 2,write(M),nl.
2
N = 1,
M = 2;
4
N = 2,
M = 4;
6
N = 3,
M = 6;
false

% findall/3と併用。組合せや順列の処理の時しばしば使う。

?- findall(N,for(1,N,10),L).
L = [1,2,3,4,5,6,7,8,9,10]
2011/10/23(日) 11:25:08.28
>>296
ふーむ・・・
数列をただ生成してるだけだけど、Prologだといろんな使い方がある訳か・・・

Haskellだと数列リスト作って後から加工する形かな?

for n m _ | m n == False = []
for n m s = n: for (s n) m s

使用例

*Main> mapM (print.(*2)) (for 1 (<=3) (1+))
2
4
6
[(),(),()]

確かに、>>294の言うとおり、リスト内包表記使う方が自然だね

for n f m s fn = [fn x | x <- [n,(s n)..m], f m n == False]

使用例

*Main> for 1 (<=) 3 (1+)
[1,2,3]

prologの方が、手続き型のforに使い方が近くなるのか
2011/10/23(日) 11:27:36.00
あう・・・

>for n f m s fn = [fn x | x <- [n,(s n)..m], f m n == False]
の"fn"は無視して・・・
299286
垢版 |
2011/10/24(月) 08:20:39.22
>これはC言語等の下劣な仕様に阿っているのが悪いのであって
は適切な書き込みでありませんでした。恐縮ですが、無いことにしてください。
2011/10/24(月) 16:05:09.28
>>293
for/3の典型的な使い方。 findall/3 の中で使う。

ふたつ取り出す(_リスト,_一つ目,_二つ目) :-
  length(_リスト,_リストの長さ),
  findall(N,for(1,N,_リストの長さ),L),
  順列(L,2,[M,N]),
  nth1(M,_リスト,_一つ目),
  nth1(N,_リスト,_二つ目).

?- ふたつ取り出す([赤,青,緑],_一つ目,_二つ目).
_一つ目 = '赤',
_二つ目 = '青';
_一つ目 = '赤',
_二つ目 = '緑';
_一つ目 = '青',
_二つ目 = '赤';
_一つ目 = '青',
_二つ目 = '緑';
_一つ目 = '緑',
_二つ目 = '赤';
_一つ目 = '緑',
_二つ目 = '青';
false
2011/10/24(月) 19:07:03.79
>>300
ご存知かもしれませんが、select/3を使うと、もっとシンプルに書けますよ。

choice2(L, E1, E2) :- select(E1, L, L1), select(E2, L1, _).
2011/10/24(月) 21:04:25.60
>>285
for/3の用例集を追加しました。
http://nojiriko.asia/prolog/for_youreishuu.html
303302
垢版 |
2011/10/24(月) 21:07:52.52
ガウス行列の述語群は間違っているところがあって、
正しく実行されません。forの使い方の例として見るためのものとしてください。
2011/10/26(水) 14:30:19.35
>>301
そうですね。nth1/3はほとんど使いませんね。
2011/10/26(水) 17:32:24.68
>>284
素直に気合いの入ったページだと思ったけど、
その後すぐに「医者の不養生」という言葉が思い浮かんだw
2011/10/27(木) 20:03:54.30
>>302
ページ内索引を設けるなどして、参照しやすく作られていると助かります。
2011/10/27(木) 20:45:58.35
>>306
順不同の2300題のうち約300題を抜き取ったもので、どんな索引を
作るかなど、課題山積ですね。for/3述語から始まるループに名前が
付けられれば、索引は作りやすい。for/3は最も名前を与えにくい述語
ですが、これに限らず部分計算のかけらに適切な名前を与えることが
現在のそしてこれからのテーマです。
2011/10/27(木) 20:52:43.37
順不同ではなくて、何の順序付けもされていない2300題から約300題
前の方から抜き取っただけで・・・ ですね。
2011/10/27(木) 20:56:56.62
>>307
ブログ形式にするのはいかがでしょうか?
ブログのタグ機能を使えば、管理も参照もしやすくなるように思います。
2011/10/27(木) 21:03:23.89
仕上げのイメージは既にあって、
「英語活用大辞典」と「囲碁定石大辞典」という2つのタイプ、機能のミックスです。

1) ある述語の具体的な定義節を参照可能で
2) できるだけ多くの、出来れば公開(出版)された全てのProlog述語の定義節が網羅されて、
3) 一つのテーマ、課題をもとに詳細な変化譜を展開する

使う人がいるかどうか疑問ですが、私一代では仕上がりません。
2011/10/27(木) 21:17:24.15
>>309
それぞれに読んだ人が部分部分にコメントをつけたり誤りを指摘したり
できるから、おもしろい利用法かも知れませんね。# から始まる課題の
コピーの他に要約を付けていけばいい。ただし、私は医者や紺屋ほど
専門家ではないけど、ブログって実は使ったことがない。作ったことも。
2011/10/28(金) 12:11:43.15
最近のは定石大事典かな。
以前は定石大辞典だった気がする。瀬越憲作名誉九段の監修。
2011/10/28(金) 18:22:41.97
twitterへのPrologに関する日本語の書き込みがここのところ約一ヶ月
24時間で15~20ツイートを常に維持している。
4-5月ころは3~5平均だったから、相当の増加。外国語のツイートはさらに
爆発的で5倍どころではない。
2011/10/28(金) 18:28:01.50
なんかあったの?
2011/10/28(金) 18:53:04.11
>>314
8月から「7つの言語 7つの世界」の影響で2倍以上の書き込みになった。
外国の事情は、よく判らないけど、似たようなことが起こっているようだ。
9月後半からの急増は相乗効果ではないか。過去の遺物といった否定的な
先入観による書き込みはほとんどなくなり、面白いという書き込みが突然
増えた。
2011/10/28(金) 19:00:13.44
難しい。わからないも多いな。
2011/10/28(金) 19:35:17.42
よく分からんが、関数型言語への注目が集まった波及効果によって、
宣言型言語の一つである論理型言語(Prolog)にも関心が増えたのではないかと推測

あとはCoqのような実用的な定理証明系が登場して一般人向けの情報が増えた
(実用的といっても....だし、一般人といっても.....だけどね)
その結果として「論理とプログラミングとの関係」について考える人が増えたのかも
物事を形式的にモデル化するには関数だけでは足りなくて、論理も必要になるから
2011/10/28(金) 20:06:42.91
>>317
確かにそんなことをつぶやいてる人が結構いる。関数型への関心の波及効果と
いうのも。対で語られることも多い。
2011/10/28(金) 20:57:19.14
そこでCurryですよ
2011/10/28(金) 21:08:44.19
第五世代のころは世間的にはどんな扱いだったんだろう?
銀の弾丸みたいだったのかな
2011/10/28(金) 21:28:30.72
>>320
過大評価されたし、バブル期でもあった。
Prologプログラマを派遣してもらうにはひとり120万/月とか。
ナレッジエンジニアの必須技術とされた。実はプログラマ数は
あまり増えなかったが、一応メジャー言語の末席。bit誌などの
広告ではProlog処理系が他を圧倒していた。
企業がPrologを見限って、C++に移行して急速に衰退した。
PrologでやりかたったことをC++でできるというわけではなく、
AI技術発展のお裾分けにあずかるという目論見はその時点で
挫折。
2011/10/28(金) 23:41:01.71
民主党が与党から転落するシナリオのパターンをPrologを求めて
2011/10/29(土) 00:26:01.26
swi-prologのインタプリタをコマンドプロンプト内で実行させることはできませんか?
2011/10/29(土) 00:29:29.96
UNIXなら swipl でインタプリタが対話モードで起動するけど....
2011/10/29(土) 00:36:42.49
>>324
すいません。今試したら、コマンドプロンプト上でswipl.exeが問題なく動作しました。
以前、あんなにはまったのは何だったのだろう…
2011/10/29(土) 05:14:40.59
そういやちょっと前までplconだったよね
再インストールしたらswiplに変わってて焦った;;
2011/10/29(土) 13:00:09.12
http://nojiriko.asia/prolog/findmax.html
のmax/2の実装を見て、もっと簡潔に書けそうな気がしたのでチャレンジしてみました。

% max_list(_リスト, _リストの中の最大値).

max_list([_唯一の要素], _唯一の要素) :- !.
max_list([_先頭要素 | _残りのリスト], _最大値) :-
  max_list(_残りのリスト, _残りのリストの最大値),
  (_先頭要素 @> _残りのリストの最大値 ->
    _最大値 = _先頭要素 ;
    _最大値 = _残りのリストの最大値).

accumulatorを使うか使わないかの違いしかないですね…
2011/10/29(土) 13:02:51.49
?- max_list([1, 30, X, 75], X).
X = 75.

ん?これでいいのか…?
2011/10/29(土) 13:37:42.77
>>328
Prologの代入(単一化)とは、そういうものじゃないかと思われ
2011/10/29(土) 14:25:17.01
>>327
要素位置番号も要求されているので一引数増えていますが、

http://nojiriko.asia/prolog/c152_883.html

の方が普通の最大値述語に近いと思います。四通り作って見ました。
331330
垢版 |
2011/10/29(土) 14:26:44.60
あ、5通りでした。
2011/10/30(日) 00:29:44.58
functor/3や=..は何かに使えそうだけど、使いどころがイマイチ分からない
NGNG?PLT(18001)
>>332
Lispのマクロ的な使い方や、Prologの項データを別の形式で出力する時などに便利そうですね〜

X is 2 + 3,
Y is 6 + X * 3,
write(6 + 5 * 3 = 6 + Y * 3).

Prologはこのようにちょっとした計算でも、
ゴール間の値の橋渡しの為の変数を沢山使いますよね

そこで、これを↓のようにゴール中に別のゴールを直接記述するマクロを=..で作ってみました
func_style(write(6 + 5 * 3 = ^is(**, 6 + ^is(**, 2 + 3) * 3)), X),
X.
https://gist.github.com/1325544
2011/10/31(月) 00:52:16.75
で、prologで何ができるの?
2011/10/31(月) 05:02:43.89
>>334
できないものが何があるかだろう。百万回以上の繰り返しが当然の領域。
OS。数値解析。ビットマップ処理。大規模事務計算(トランザクションが1千万を超えるようなもの)。
2011/10/31(月) 14:43:54.61
>>335
事務処理のバッチ処理でデータベースアクセス時間+Prologの演算時間として
後者にどれくらい許されるかということだろう。1時間だと2000万トランザクション
3時間だと5000万は超えるから、一部上場企業の95%以上クリアできると思うけど。
2011/10/31(月) 21:47:52.41
ゲームとかも作れるの?
prologからwin32apiとかdirectxとかで画像表示もできる?
2011/10/31(月) 22:47:34.81
>>337
Visual Prolog という製品(昔BorlandのTurbo Prologといった)上で開発された
ゲームというのは見たことがあるけど、激しく画面が動いていた記憶以外、ゲームには
関心がないからどういう種類のものかわからないし内容も覚えていない。
他の処理系もそれぞれグラフィックインターフェイスを謳っているようだけれど、
ゲームに適したものかどうかは知らない。
339338
垢版 |
2011/10/31(月) 22:52:56.59
3D的な部分を計算する必要があるとすると、現在のProlog処理系では
時間がかかり過ぎて動かないはずだから、そういうことはしていないか、
別のからくりがあるのだと思う。
2011/11/09(水) 21:59:04.10
prologで前向き推論は出来るの?
2011/11/09(水) 23:01:40.86
>>340
累算器を使えば可能
2011/11/14(月) 05:29:23.97
TIOBE INDEX NOVEMBER http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Prologは急伸。10月は0.288 だったのが 0.353
23%上昇し、一気にHaskellを追い抜いた。
2011/11/14(月) 06:51:58.56
>>342
6月は0.227くらいだったから、56%の上昇か。
2011/11/14(月) 06:59:23.04
このぺースでいくと、一年位で本来の実力、0.45% 25-30位までは戻る。
そうはいかないけどねw
2011/11/14(月) 07:24:15.36
>>344
2006年5月がPrologは0.384 で25位だから、上位に新言語や対象とする言語に
加えられた言語が入ってきたから順位が落ちたと読むことができる。
それと、Prologという語はプログラム言語以外に使われるケースが増えているから、
INDEX作成時にこれをどう除去するかで、全く数字が変わってきてしまう。
ここ数ヶ月はたしかにGoogleの検索数やtwitter数が急増しているが、
最終的にはその匙加減ということになる。
2011/11/15(火) 04:34:45.80
>>345
元々、求人数なんかは減ってなかった。日本ではさっぱりだが。
2011/12/07(水) 06:23:03.84
あっという間に12月。TIOBE INDEXはDecemberに更新された。
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Prologは 37 -> 33位とさらに続伸。
前月のシェア 0.353 -> 0.408 に、前年同月と比較すると195%の上昇。
COBOL,VB.NET,F#を抜き去った。来月はSchemeを抜くだろう。
2011/12/07(水) 07:19:36.18
1980年代は10位以内だから、それには遠く及ばないけど、
論理型の盟主ということで、パラダイムシフトの時期には
注目されるということだろう。関数型は分散するからね。
それにしても、近い将来のErlang,Prologの20位以内揃い踏みは
確実のようだね。
2011/12/07(水) 07:26:52.84
>>347
0.403じゃないか?
2011/12/07(水) 21:00:58.91
今週から授業がPrologに入り、来週のテストまでに仕上げてくるようにと課題を渡され
いろいろと考えてみてメソッドはこれで合っていると思うのですが、
肝心の再帰処理でのリストの作成がわからなくて詰まっています。
どなたか助けてもらえないでしょうか?

//入力と出力
?- nextItem( [146, 394, 882, 1730, 3082], N).
N = 5106


/*メソッド
146, 394, 882, 1730, 3082
248, 488, 848, 1352
240, 360, 504
120, 144
24

隣り合う数字の差分を新しいリストに出力しつづける
(248 = 394-146, 488= 882-394,...)
リストの最後まで行ったら、終了

新しいリストで繰り返し同じ処理を行う
リストの数列の長さが1になったら終了
今まで作成したリストの最後の数字をすべて足し算する。

N = 24 + 144 + 504 + 1352 + 3082
N = 5106

*/メソッド
351350
垢版 |
2011/12/07(水) 21:19:01.01
組み込み関数は使わずに作成せよとのことです。
数列の最後のナンバーの取り出し方や、計算部分はなんとかなったのですが
新しいリストを作成していく方法がどうにも。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況