【論理】Prolog【初心者】

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

これは良い言語だ…
2011/05/28(土) 16:29:30.76
appendって何?リストの追加?
2011/05/28(土) 16:48:35.26
>>207
?- append(L0,[X|R],[1,2,3]).

L0 = [],
X = 1,
R = [2,3];

L0 = [1],
X = 2,
R = [3];

L0 = [1,2],
X = 3,
R = [];

no.
?-
2011/05/28(土) 18:19:29.52
>>207
?- length(L0,3),append(L0,[X,Y|R],[1,2,3,4,5,6]).

L0 = [1,2,3],
X = 4,
Y = 5,
R = [6];
no.
?- length(L0,3),append(L0,[X,Y|R],[a,b,c,d,e,a]),append(_,[Z|_],L0),append(_,[Z|_],R).

L0 = [a,b,c],
X = d,
Y = e,
R = [a],
_ = [],
Z = a,
_ = [b,c],
_ = [],
_ = [];
no.
?-
2011/05/28(土) 18:24:29.21
>>207

select(A,L,X) :- append(L0,[A|R],L),append(L0,R,X).

?- select(A,[1,2,3],X).

A = 1,
X = [2,3];

A = 2,
X = [1,3];

A = 3,
X = [1,2];

no.
?-
2011/05/28(土) 18:40:40.85
>>207
nth/3 の定義

nth(Nth,List,X) :- length([_|L0],Nth),append(L0,[X|_],List).

2011/05/28(土) 19:07:00.82
>>207

カンマで括られた文字列の検索(_文字列,_適合文字列) :-
    atom_chars(_文字列,Chars),
    append(_,[','|L1],Chars),
    append(L01,[','|_],L1),
    \+(append(_,[','|_],L01)),
    atom_chars(_適合文字列,L01).

2011/05/28(土) 20:29:06.72
なにこれ、こわい
2011/05/28(土) 21:25:53.31
>213
自分のやってることの意味を考えずに生きてきて、
ついにコードを見せることしかできなくなった
哀れな技術者の末路です

そっとしておいてあげてください。
2011/05/28(土) 22:22:23.55
>>203
このスレ 残滓で満ちてそう…
2011/05/28(土) 22:46:02.81
>>214
俳句が仮に三句から構成されているとすると、
少なくとも六通りのPrologコードが書けるということ。
Prologプログラマは饒舌にならなくては。
2011/05/28(土) 22:51:48.86
そうだね、100通りでも200通りでもかけるね。
そうやって、無意味なことに貴重な税金を無駄遣いしてきたわけか。
2011/05/28(土) 23:20:33.96
>>217
文章の構成が変わることによって当然意味が変わる。
意味が変わったことに敏感にプログラミングできるか
ということだけど。無意味と論証するのも難しいだろう。
2011/05/28(土) 23:28:52.02
だから、その行為をどう意義づけているの?
それは70年近いプログラミングの発展史のなかでどう位置づけられるの?

それを語らずにコードを垂れ流しても何の意味もない。
2011/05/29(日) 03:43:12.57
Prolog製の商用アプリケーションにGeneXusってのあるから何が出来るのか調べてみたらどうだい。

http://www.atmarkit.co.jp/im/cae/reports/0701/01.html
http://www.nikkei.com/tech/business/article/g=96958A9C93819499E2EAE2E2838DE2EAE3E0E0E2E3E2E2E2E2E2E2E2

http://itpro.nikkeibp.co.jp/article/COLUMN/20101207/354963/
http://itpro.nikkeibp.co.jp/article/Watcher/20101001/352528/
2011/05/29(日) 06:49:35.85
>[注2]「シーシャープ」と読む。CやC++をベースに米マイクロソフトが開発し、2000年6月に発表したプログラミング言語。
>従来のCやC++との違いは、インターネット経由でアプリケーション・サービスを提供するWebサービスに対応すること

日経・・・
2011/05/29(日) 07:38:29.49
> 「プログラマはもう要らない」。
> 大手物流会社のシステム子会社で新技術の社内展開を進めるマネージャーはこう言い切る。
> ここでいうプログラマとは、企業情報システムの開発プロジェクトでプログラムを作成する担当者を指す。

お前ら、もう要らないらしいw
2011/05/29(日) 07:53:41.82
俺の会社は業務の要を他社に依存してます宣言かw

>>221
どうして日経エレクトロニクスとか日経メカニカルとか、のようなレベルの記事を
書けないのかねぇ。
2011/05/29(日) 08:26:23.42
この記事を使って、リストラが進められそうだな。
「ツール導入で生産性が20倍になりますので、人員を1/20に削減します」
2011/05/29(日) 08:50:03.16
>>224
それで会社が潰れても責任は全て株主が負う。
気にするな。
2011/05/29(日) 08:52:30.24
どんどんやって、どんどん潰れっちまえ
2011/05/29(日) 09:27:54.50
それはいいが、prologの名前をこんないんちき商売に
使うのはやめて欲しい。
2011/05/29(日) 09:52:32.48
>>227
使ってみたことあるのかい?
2011/05/29(日) 12:15:34.41
>従来のCやC++との違いは、インターネット経由でアプリケーション・サービスを提供するWebサービスに対応すること
.NETをインターネットの事か何かだと思ったんだろうな
2011/05/31(火) 08:36:17.56
>>219
「発展」史については興味ないけど、
中江俊夫の「語彙集」みたいなものが、
書ければ面白いね。
2011/06/01(水) 12:41:08.98
>>230 引数一切なし?
2011/06/04(土) 16:42:06.23
Prologって業務ロジックを抽象的に表すのには向いているんじゃないだろうか
流行りの(?)DSLとかの代わりにならないかな
2011/06/04(土) 18:05:49.85
>>232
これ以上向いている言語はないと思うけど。
速度を要求されない、複雑化の可能性のあるロジックに
ついては、開発速度、プログラマの養成の容易さ、
保守のしやすさ、全ての点で優れている。
欠点はオブジェクト指向言語でなくて、.NETから外れて
いることかな。
2011/06/04(土) 20:53:49.88
おおすごい。

なんで普及していない/普及しなかったんだろう?
2011/06/05(日) 06:47:44.50
swi-prolog 5.11.14 で日本語が通りません。

'親子'('茂雄', '一茂')
.
のような日本語述語や日本語の項はUTF-8で書いて、
クォートでくくれば読み込めるんですが
listing しても文字化けしています。
日本語述語で問い合わせしても、そんな述語はないといわれます。

何か設定等必要なのでしょうか?
環境はwindows xp sp2です。
2011/06/11(土) 18:07:04.52
750 :デフォルトの名無しさん[sage]:2008/12/23(火) 10:10:50
>>747
http://www.swi-prolog.org/versions.html
UTF-8対応は5.6.x(開発版では5.5.x)から
2011/06/11(土) 18:08:07.51
おっと5.11.14かごめんw
2011/07/01(金) 18:39:03.66
>>236
ハッァァアァァァァァァアァアアァァァ?????????????
ゴミは何いってもゴミ
ゴミが口を開くな
239デフォルトの名無しさん
垢版 |
2011/07/11(月) 10:57:06.09
ぷろろぐ
240デフォルトの名無しさん
垢版 |
2011/07/13(水) 20:40:07.15
探索とかもろ並列処理できそうな

マルチコア時代の今なら並列prologとか出てこないかしら?
2011/07/13(水) 21:37:00.70
お好きなのをどうぞ

concurrent prolog
parlog
ghc
kl1
strand
2011/07/13(水) 23:41:15.56
>>238
すごいなお前勘違い全く以てしないのか
人をけなす前にもっとそのスキルを社会に役立てましょう^^
2011/07/14(木) 04:09:18.84
統合失調症の人にそんなこと言っても無駄
2011/07/14(木) 14:41:46.26
>>240
並列(並行)Prologということではありませんが、
AZ-Prologでは、マルチコアに割り振ることを、
処理系に委託することはできます。
2011/07/15(金) 03:23:58.99
>>240
こういうのとか
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.21.1017
2011/07/15(金) 05:33:59.23
>>240
http://nojiriko.asia/prolog/c135_256.html
AZ-Prolog処理系作者によって書かれたMPIライクな
マルチプロセス並列処理機能の使用プログラム。
2011/08/21(日) 10:38:06.34
JVM上で動作し、Javaからも呼び出し可能なprologがあれば!
2011/08/22(月) 09:38:53.46
prolog cafeがありますよ
2011/08/22(月) 15:03:23.52
>>248
d
javaツールに組み込んでみるんや
250デフォルトの名無しさん
垢版 |
2011/09/07(水) 11:51:09.81
完全な素人です。素朴な疑問なのですが、
同じ事をする場合、手続き的言語と比べて明らかに効率が悪くなる処理とかありますか?
例えばユニフィケーションって処理的にかなり重い気がします。
他にも配列と比べるとリストでは先頭の値しか扱えないとか、再帰呼び出しで
(一つ減らして)全要素を毎回コピーするとか手続き型の先入観を持ってると
効率が悪い気がするのですが、理屈の上では処理が増えるとか言う事は無いのでしょうか?
記憶領域もN^2/2とか必要になりそうですし。

ユニフィケーションのコストってどの位と見積もれるものでしょうか?
事実の数が10倍になると10倍の処理が必要なのですか?
それともSQLのインデックスみたいな事、もしくはキャッシュみたいなものを持っていて
それ程増えないのでしょうか?

変な事を書いているかも知れませんので、疑問自体がおかしいみたいな指摘でも結構です。
よろしくお願いします。
2011/09/07(水) 18:21:14.48
>>250
Prologは最も速いコンパイラ言語の100倍以上遅いでしょう。
その理由の過半がユニフィケーションと変数の繰り返し出現検査に
あると思います。指摘されたように配列がないこともある場合には
原因となります。それに比べればトレイルスタック等の追加的処理は
大きなコストになっていないはずです。

明らかに遅くて使えないのはビットマップの処理ですね。繰り返し
数百万のビットに対して演算する場合です。RPGも無理でしょう。

Prologはオンメモリデータベースですから、そこそこ速いのですが、
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
ページ内索引を設けるなどして、参照しやすく作られていると助かります。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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