【Perl,PHP】LLバトル ..
[2ch|▼Menu]
2:デフォルトの名無しさん
09/07/25 11:48:28
>>1
Lispも入れろっちゅうことですよ アホー!


3:デフォルトの名無しさん
09/07/25 12:49:38
Lispは"Perl、PHP、Python、Ruby、JavaScript・・・"のなかの "・"です。
信者とアンチがうざいから名前を出さないわけではありませんのでご了解をお願いします。

4:デフォルトの名無しさん
09/07/25 12:59:52
これはハスケルを締め出そうという陰謀のスレね…こわい

5:デフォルトの名無しさん
09/07/25 13:30:52
>>4
>>3のLispのところをハスケルに置き換えてください。他の言語も同様です。
マイナーな言語を使う人は劣等感から妄想を抱きがちですが決してそういう意図は
ありませんのでご了解をお願いします。


では、死ぬまで語りやがるよう お願いします。
なお私は1ではありません。でしゃばってすみません。

6:デフォルトの名無しさん
09/07/25 14:50:02
D言語はLLですか?

7:デフォルトの名無しさん
09/07/25 15:03:28
いえ、ダメ言語です

8:デフォルトの名無しさん
09/07/25 15:07:58
LLは lua & Lisp の事です D言語は入る余地無しです


9:デフォルトの名無しさん
09/07/25 16:19:24
え、Lispに一番近いとまで言われたPythonってなんだったの

10:デフォルトの名無しさん
09/07/25 17:09:12
Lispに近いって、どういう事?
おままごとか、せいぜいCADのマクロぐらいにしか使えないって事?

11:デフォルトの名無しさん
09/07/25 17:28:25
関数に関数を渡したり、関数の中で関数を定義したり、関数が関数を返したりする事。
大雑把に言えばLispに近いほどJavaから遠くなる傾向がある。

12:デフォルトの名無しさん
09/07/25 17:35:16
他にLispっぽいとか言われるのは、JavaScriptとかRubyとか
基本的には褒め言葉
強力なリストであったり、高階関数であったり、GCであったり
パワーのある言語だねって

13:デフォルトの名無しさん
09/07/25 17:37:47
関数系は遅延評価が(どういう風に使えばいいのかが)よくわからない。

14:デフォルトの名無しさん
09/07/25 17:59:07
Javaだってインナークラス使えば同じことができるぞ。

15:デフォルトの名無しさん
09/07/25 18:01:05
高階関数は使い出すとクセになるな
Lisp使うとjavaは要らんとつくづく思うよ


16:デフォルトの名無しさん
09/07/25 19:13:09
pythonやrubyで√2の小数点以下100桁を求めるとしたらお前らどうよ?


17:デフォルトの名無しさん
09/07/25 19:14:14
いい感じだよ。

18:デフォルトの名無しさん
09/07/25 19:32:42
Python
>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 101
>>> Decimal(2).sqrt()
Decimal('1.414213562373095048801688724209698078569671875376948073176679737990732
4784621070388503875343276415727')

19:デフォルトの名無しさん
09/07/25 19:57:38
まだやんの?
最強は機械言語でいいじゃん

20:デフォルトの名無しさん
09/07/25 20:01:42
import使われるとなんかズルされた気がするよ。


21:デフォルトの名無しさん
09/07/25 20:41:18
√2 = r と置いてみる

(r * 10^100)^2 = r^2 * 10^200 ≒ 2 * 10^200 となる整数 (r * 10^100) を探してみる

(r * 10^100) / 10^100 がたぶん求める答え

ひょっとすると 10^101 かもしれないがそれは後で検証

22:デフォルトの名無しさん
09/07/25 21:22:55
>>> def r2(m):
...  p = 2*10**m
...  for i in xrange(p):
...   if (p-3)*10**m <= i*i and i*i <= (p+3)*10**m:
...    print i
...
>>> r2(4)
14142
14143
>>> r2(5)
141421
141422
>>> r2(6)
1414213
1414214
>>> r2(7)
14142135
14142136
遅いわwww

23:デフォルトの名無しさん
09/07/25 21:32:40
>>> r2(100)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in r2
OverflowError: long int too large to convert to int


24:デフォルトの名無しさん
09/07/25 21:36:15
このスレもレベル下がったな
糞スレ決定だろ

25:デフォルトの名無しさん
09/07/25 22:44:23
みんな!民主党が大変な事になってるよ。
URLリンク(www.nicovideo.jp)

26:デフォルトの名無しさん
09/07/25 23:14:45
平方根を数値計算するアルゴリズムは意外と簡単だ。
筆算でも算盤でもできる。
Wikipedia項目リンク

27:デフォルトの名無しさん
09/07/25 23:16:08
URLリンク(www.jma-net.go.jp)

28:デフォルトの名無しさん
09/07/25 23:38:56
√(10+3√(97+56√3))

29:デフォルトの名無しさん
09/07/26 01:53:07
遅延評価って
if( hoge() or hogehoge() )

って時に、hoge()がtrueならhogehogeが実行されないってことだしょ?
短絡的に考えれば、hogehoge()を実行しなくていい時ってことでいいんじゃない。
どっちも確実に実行したいなら、ifに掛ける前に代入しておけばいいだけだし

30:デフォルトの名無しさん
09/07/26 01:54:34
は?

31:デフォルトの名無しさん
09/07/26 01:57:10
ははは

32:デフォルトの名無しさん
09/07/26 02:02:22
あっ、ごめん
俺おもいっきし間違ってる?

33:デフォルトの名無しさん
09/07/26 02:16:56
それは短絡評価。

34:デフォルトの名無しさん
09/07/26 06:37:03
foo( bar() + baz() )
って時に、普通の言語ならbar()+baz()をそれぞれ呼んで計算してから
その結果をfoo()に渡すのに対して、遅延評価のある言語だと
いきなりfoo()に「bar()+baz()」っていう「式」を渡す
んで、bar()+baz()の値が実際に必要になるまでは式のままで評価されない

あと、無限リストなんかも扱えたりする
(1〜∞)の中から、条件に合致する値を抽出し、さらのその2番目から10番目を抽出する
なんて処理がマジで言葉通りに書ける

35:デフォルトの名無しさん
09/07/26 06:37:40
>>22-23
せめてニュートン法くらい使えよw

>>> def r2(m):
...  p0 = 2*10**m
...  p = p0
...  while(not ((p0-3)*10**m <= p*p and p*p <= (p0+3)*10**m)):
...   p = (p*p + p0*10**m) / (2*p)
...  print p
...
>>> r2(4)
14142
>>> r2(10)
14142135623
>>> r2(100)
14142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727


36:デフォルトの名無しさん
09/07/26 06:54:49
前置記法って何でLispしか無いんかね?

37:デフォルトの名無しさん
09/07/26 07:01:42
>>34
>あと、無限リストなんかも扱えたりする
>(1〜∞)の中から、条件に合致する値を抽出し、さらのその2番目から10番目を抽出する
>なんて処理がマジで言葉通りに書ける

整数nについて,各桁の数の階乗の和S(n)を考える.たとえば,n = 145 とすると,

S(145) = 1! + 4! + 5! = 1 + 24 + 120 = 145
となる.このように,S(n) = n となるn(n≧0)のうち3番目と4番目を抽出せよ.

これを遅延評価でおながいします.

38:デフォルトの名無しさん
09/07/26 07:19:34
ああ、Lispスレの929か。

39:デフォルトの名無しさん
09/07/26 08:08:24
>>37
それ2つしか答えないよ


40:デフォルトの名無しさん
09/07/26 08:13:40
だいたい、「遅延評価でおながい」って、何をおながいするんだ?

41:デフォルトの名無しさん
09/07/26 08:40:47
平方根はこんな感じ ↓

(labels ((nxt (x v) (/ (+ x (/ v x)) 2)))
(defun sqp (n e)
(do* ((x1 n x2) (x2 (nxt x1 n) (nxt x1 n)) (err (expt 10 (- 0 e))))
((< (abs (- x1 x2)) err)
(truncate (* (expt 10 e) x2))))))

> (sqp 2 100)

14142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727



42:デフォルトの名無しさん
09/07/26 08:46:33
>>40
ハスケルでお願いっていう意味じゃないの?


43:デフォルトの名無しさん
09/07/26 08:51:30
>>39
では50番目から100番目まで。


というのはおいといて”マジで言葉通りに書ける”とあるから1−2番目を計算せずに
いきなり3番目を取り出せるのだろうな。処理系内部では一所懸命計算やるだろうけど。
>>35の説明で遅延評価をはじめて知ったんだけど処理系にバグを仕込むために考え出さ
れた仕様ではないだろうか。

44:デフォルトの名無しさん
09/07/26 09:07:44
>>39
4っつだ
ぼけ

45:デフォルトの名無しさん
09/07/26 09:08:40
「4っつ」って珍しい書き方だな。

46:デフォルトの名無しさん
09/07/26 09:11:32
>>43
え、もしかして、なんか言質とってツッコミ入れて恥かかせたがってる?
「言葉通りに」というところを取り上げて何か言いたかったら、元の「言葉」を正しく読み取らなきゃダメよ。

47:デフォルトの名無しさん
09/07/26 09:26:02
よく2chの情報はいい加減とか、正しくない情報が多いとか言われるけど、
僕にとっては大事な情報源です。
たまにはボロクソ言われることもあるけど、みんな親切に教えてくれる。
いつもありがたいと思ってる。

48:デフォルトの名無しさん
09/07/26 09:29:47
>>46
そんな気はまったくない。>>35には感謝してるよ。よそで”遅延評価というのはだな・・・”
とか言ってみたいほうだから。元の「言葉」を正しく読み取ったらどえなるのだ。

49:デフォルトの名無しさん
09/07/26 09:38:28
うわ。アンカー間違えた>>34だ。最後”どえなるのだ” じゃねえ ”どうなるのだ” だった。

50:デフォルトの名無しさん
09/07/26 10:09:38
tail $ take 10 $ filter func [1..]

とかそんな感じのことじゃねーの?

51:デフォルトの名無しさん
09/07/26 10:31:33
>>48
> 元の「言葉」を正しく読み取ったらどえなるのだ。
「(1〜∞)の中から、条件に合致する値を抽出し、さらのその2番目から10番目を抽出する」
これが元の言葉だよね。
「”マジで言葉通りに書ける”とあるから1−2番目を計算せずに」って、それは元の言葉にある
「条件に合致する値を抽出」する途中の段階を、そっと見て見ぬフリしてない?

52:デフォルトの名無しさん
09/07/26 10:56:53
遅延評価って、例えば現在の時間を内部でパラメータとして使うような関数だと、
いつ評価されるん?

53:デフォルトの名無しさん
09/07/26 11:00:43
現在時間を使うなら「時間を得る」部分だけはその時点で評価されて
それ以外の処理は後回しじゃね?

54:デフォルトの名無しさん
09/07/26 11:06:17
>>51
見て見ぬフリはしてない。「条件に合致する値を抽出」するところは処理系が
3番目が必要になったときに1−3番目を計算して3番目を返すと解釈している。
だからプログラマはいきなり3番目を取り出せると想像したんだけどこれで
合ってるんじゃないか。

55:デフォルトの名無しさん
09/07/26 11:09:07
遅延評価と、クロージャとかカリー化を統一できそうだな。

56:デフォルトの名無しさん
09/07/26 11:38:45
>>52
Haskell では IO モナドでそのへんをうまくやってる

57:デフォルトの名無しさん
09/07/26 17:48:30
とんだすれ違いスレだな

58:デフォルトの名無しさん
09/07/26 18:52:22
すれちがい通信か

59:デフォルトの名無しさん
09/07/26 19:52:52
>>16>>26のアルゴリズムで書いてみたわ。
泥臭い方法だけど、桁が増えても計算量が線形増加だからいいかも。
30行くらいだけどソースいる?

60:デフォルトの名無しさん
09/07/26 21:05:47
plz

61:デフォルトの名無しさん
09/07/26 21:06:28
2/2 URLリンク(www.youtube.com)
1/2 URLリンク(www.youtube.com)

62:59
09/07/26 21:16:15
def kaihei(n, k):
    stack = []
    keta = 1
    while n >= 100:
        stack.append(n % 100)
        n = int(n / 100)
        keta = keta + 1
    else:
        stack.append(n)
    dlist = list(range(10))
    dlist.reverse()
    baikon = 0
    rem = 0
    result = ""
    while (keta > 0 or (keta <= 0 and -keta <= k)):
        if keta == 0:
            result += "."
            keta = keta - 1
        if(len(stack) > 0):
            rem = rem + stack.pop()
        for i in dlist:
            if(rem >= i * (baikon + i)):
                result += str(i)
                rem = (rem - i * (baikon + i)) * 100
                baikon = baikon * 10 + i * 20
                keta = keta - 1
                break
    print(result)

63:59
09/07/26 21:24:32
>>> kaihei(2, 100)
1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727

ちなみに、整数しか対応してない。
一部の名前が、開平とか桁とか倍根とかそのままローマ字になってるけど、そのあたりは勘弁してくれ。
かわりに桁合わせをちゃんとしたから。

64:デフォルトの名無しさん
09/07/26 23:32:27
クスクス

65:デフォルトの名無しさん
09/07/26 23:35:23
>>43
横レスだが

drop 49 $ take 100 $ filter (\x -> (foldr ((+) . product . enumFromTo 1 . read . (flip (:) [])) 0 . show) x == x) [1..]

直感的に書くとこんな感じかな?
49と100の部分を変えればどうとでも書けるよ。

66:デフォルトの名無しさん
09/07/27 07:40:37
>>65
サンクス!
haskell知らないから間違っているかもしれないが49までの計算結果を捨てる
のを明示しなきゃいけないということですね。
>>34を読んだら 2..10 という感じで書けると思っていた。

67:デフォルトの名無しさん
09/07/27 08:51:59
>>62-63
GJ!!!

68:デフォルトの名無しさん
09/07/27 11:28:26
memo
URLリンク(www.youtube.com)

69:デフォルトの名無しさん
09/07/27 12:08:35
>>66
そうですね。
でもたとえば「それが50番目である」ことを示すには前の49個の計算が
必要なわけで、それを省略することは遅延評価といえどできない。
遅延評価なのは100以降を計算しないこと。

自分で2,10を引数にとる関数を作ればもちろん2..10みたいに書けるよ。



70:デフォルトの名無しさん
09/07/27 15:02:19
PHPで無料レンタル鯖のいいとこ&有名なとこあります?

71:デフォルトの名無しさん
09/07/27 15:12:24
俺んち

72:デフォルトの名無しさん
09/07/27 15:25:28
養殖ならノルウェー辺りが有名だな

73:デフォルトの名無しさん
09/07/27 23:44:17
URLリンク(www.atmarkit.co.jp)

なにポーズつけてるんだよ(w

74:デフォルトの名無しさん
09/07/27 23:50:13
It has already been out.

75:デフォルトの名無しさん
09/07/28 01:14:48
「ポーズとってください」って言われたんだろうなw
『まつもとゆきひろ コードの世界』でも「私だって恥ずかしい」とか書いてた

76:デフォルトの名無しさん
09/07/28 03:13:45
その記事おもしろかったねー。いろんな話が凝縮されてて。

77:デフォルトの名無しさん
09/07/28 05:55:15
プログラマーって見栄え悪いのばっかだな。

78:デフォルトの名無しさん
09/07/28 06:00:38
見栄えで稼ぐ商売以外は似たり寄ったりだよ。

79:デフォルトの名無しさん
09/07/28 12:14:20
>77
運動不足が職業病だからな。

80:デフォルトの名無しさん
09/07/28 12:46:29
まっつんはちょっと痩せればそれなりにダンディになるとは思うが。

81:デフォルトの名無しさん
09/07/28 13:31:14
全員、顎髭を伸ばせば、かっこがつくよ。

82:デフォルトの名無しさん
09/07/28 13:50:10
They should be skin head.

83:デフォルトの名無しさん
09/07/29 19:12:58
Python 3.1からifとかforとかけっこう変わるんだね。
修正がめんどい orz



84:デフォルトの名無しさん
09/07/29 20:59:40
URLリンク(coreblog.org)
このエープリルフールを真に受けちゃった人ですか

85:83
09/07/30 01:26:38
>>84
変わらないの?良かったぁ (;´Д`)

86:デフォルトの名無しさん
09/07/30 01:31:23
しかし、3がリリースされた直後に3.1を四月馬鹿ネタにするってのもなんかセンスが微妙だな
Python 4とかなら微笑ましいんだが。
Pythonってそんなにバージョンアップしないもんなの?
Perl6がリリースされた後でPerl 6.2の話題とか、多分普通に信じるぞ。

87:デフォルトの名無しさん
09/07/30 03:32:19
Pythonのメジャーバージョンは1、2、3、3.1、3.11、3.12、3.13、3.14、3.141と増えていくからな

88:デフォルトの名無しさん
09/07/30 03:34:48
クヌース先生の美学だよなあ……

89:デフォルトの名無しさん
09/07/30 13:13:54
>>87
最近の小学生は3と聞いたけど

90:デフォルトの名無しさん
09/07/30 13:39:23
>>89
それ聞きまちがい


91:デフォルトの名無しさん
09/07/30 15:00:19
URLリンク(ja.wikipedia.org)円周率は3

92:デフォルトの名無しさん
09/07/31 00:01:38
エイプリルフールネタを一見それとはわからない状態で
いつまでもWeb上に残しておくなんて、はっきり言って悪だろ。
それでwebなんちゃらなんて会社の代取とか笑えねーって。

93:デフォルトの名無しさん
09/07/31 00:39:36
日付みればわかるだろ。アホか

94:デフォルトの名無しさん
09/07/31 01:03:21
実際、真に受けてるやつがいるだろ。アホか

95:デフォルトの名無しさん
09/07/31 01:08:02
ひとりのアホの面倒をみるためにみんなが犠牲にならなければならないのかよ

96:デフォルトの名無しさん
09/07/31 08:58:40
>>95
犠牲て。

ネットにデマを流すときはそれなりの
配慮があってしかるべき。jk



97:デフォルトの名無しさん
09/07/31 11:54:13
4/1のエントリって時点で、それなりの配慮はしてるわな。

98:デフォルトの名無しさん
09/07/31 18:47:55
4/1に書かれた記事は全て疑わないといけないのかよ

99:デフォルトの名無しさん
09/07/31 19:00:29
とうぜんだろ

100:デフォルトの名無しさん
09/07/31 21:20:58
どっかのバカがやってるならともかく、
プロフィールにそれなりの肩書き書いておいて
あんな感じじゃ、いろいろ神経疑われるわなw

101:デフォルトの名無しさん
09/07/31 22:03:28
Pythonian: モンティパイソン精神なのでそんなの余裕で笑ってスルー
Rubist: エープリルフールネタなんだからあーたらこーたら
Perler: ネタを見逃して話題に乗れない

102:デフォルトの名無しさん
09/07/31 22:13:16
>>101
あ、それいいえてミョー

103:デフォルトの名無しさん
09/07/31 23:20:35
>>101
いや、きっとdankogaiなら、
dankogaiならネタを見逃すはずがない。

104:デフォルトの名無しさん
09/07/31 23:34:11
>>103
断固GUYって誰?

105:デフォルトの名無しさん
09/07/31 23:34:33
LLTVまで残り1ヶ月を切りました。

盛り上がって参りましょう!

106:デフォルトの名無しさん
09/08/01 06:20:40
すみません。

ところで僕は中学生のころ、いじめられっこでした。
一番ひどくいじめられた放課後、先生が見るに見かねてとめてくれて
家の帰りもずっといっしょでした。そのとき、川原で先生と一休みしたんですが
先生がこんなことをいっていました。

「人間ってのはひどいもんだ。
こんな鼻くそより汚い。」

私はいまだに鼻くそより汚いという比喩がうまく理解できませんが、
そんな比喩にまで使われた鼻くそをいまだに食べています。私はRubyプログラマーです。

107:デフォルトの名無しさん
09/08/01 15:45:52
そのコピペなんかいみあんの?


108:デフォルトの名無しさん
09/08/01 18:49:14
例えばこれを実行すると結果が何になるか、すぐにわかる?
@int i=0;if(i=1){puts("1");}else{puts("2");}
Aint j=0;for(;j>0;++j){}


109:デフォルトの名無しさん
09/08/02 02:02:48
分かるよ。
1,1 が表示される。
2,for文は実行されない。

110:デフォルトの名無しさん
09/08/02 07:04:04
俺は後者はとっさに判らないな
単項++演算子の戻り値はアテにすべきじゃないと思ってる
自分じゃそういうコードは書きたくないね

111:デフォルトの名無しさん
09/08/02 07:06:57
単項++の戻り値は使われていないわけだが…

112:デフォルトの名無しさん
09/08/02 07:13:43
ごめんなさい間違えました

113:デフォルトの名無しさん
09/08/02 07:15:59
i=1が(文脈によっても)何を返すかは、言語によってブレがあるな。

114:デフォルトの名無しさん
09/08/02 08:16:52
BASIC系は文脈で比較か代入かが決まることが多いね
本家はLET省略不可だからLET文以外代入だけど

Javaは代入文自体の戻り値はCと変わらんが
if文がbooleanしか受け付けないからエラーだな

115:デフォルトの名無しさん
09/08/02 12:42:53
>>107
底辺Rubyプログラマーってことだろ

116:デフォルトの名無しさん
09/08/03 09:39:57
所謂覆面算で
英字一文字がそれぞれ異なる一桁の数字(0-9)で表されるとき
one
+ nine
+ twenty
+ fifty
= eighty
となる組み合わせを検索してください
各行の先頭の文字は0以外です

117:デフォルトの名無しさん
09/08/03 11:52:03
それって正解は「そんな組み合わせは無い」で合ってる?

118:デフォルトの名無しさん
09/08/03 11:55:11
pythonスレで答え出てなかったっけ?

119:デフォルトの名無しさん
09/08/03 12:26:48
ごめんあった、何故かone+nine+twenty+fifty+eighty=eightyで計算してた俺の馬鹿〜
selects([], _).
selects([X|XL],YL) :- select(X,YL,L), selects(XL,L).
check(O,N,E,I,T,W,Y,F,G,H,ONE,NINE,TWENTY,FIFTY,EIGHTY) :-
ONE is O * 100 + N * 10 + E,
NINE is N * 1000 + I * 100 + N * 10 + E,
TWENTY is T * 100000 + W * 10000 + E * 1000 + N * 100 + T * 10 + Y,
FIFTY is F * 10000 + I * 1000 + F * 100 + T * 10 + Y,
EIGHTY is E * 100000 + I * 10000 + G * 1000 + H * 100 + T * 10 + Y,
ONE >= 100, NINE >= 1000, TWENTY >= 100000, FIFTY >= 10000, EIGHTY >= 100000,
EIGHTY =:= ONE + NINE + TWENTY + FIFTY.
solve(ONE,NINE,TWENTY,FIFTY,EIGHTY) :-
selects([O,N,E,I,T,W,Y,F,G,H],[0,1,2,3,4,5,6,7,8,9]),
check(O,N,E,I,T,W,Y,F,G,H,ONE,NINE,TWENTY,FIFTY,EIGHTY).
?- solve(ONE,NINE,TWENTY,FIFTY,EIGHTY).
ONE = 984,
NINE = 8584,
TWENTY = 364832,
FIFTY = 75732,
EIGHTY = 450132 ;
false.

120:デフォルトの名無しさん
09/08/03 13:24:34
prologだっけ?


121:デフォルトの名無しさん
09/08/03 14:54:47
Prologだよ
手続き書くのは面倒いが
覆面算とかはむしろこの言語の十八番だと思う

122:デフォルトの名無しさん
09/08/03 15:29:28
>>121
おすすめのProlog実装を教えてください。
あとおすすめの教科書もあれば。

123:デフォルトの名無しさん
09/08/03 15:48:44
とりあえずはSWI-Prologで良いんじゃないかと
教科書は…Prologスレのテンプレに載ってるやつ片っ端読むのが良いんじゃない?
日本語で書かれてるやつだけ読んでもそれなりには解るかと

ちなみに今回のコードは「Prolog 覆面算」でググって出てきた
SEND+MORE=MONEYのコードを元にして改変したものだったりする
自分で書いたコードは遅すぎて話にならんかったw

124:デフォルトの名無しさん
09/08/03 15:51:51
metafontとかでも解けそうな気がするな。
くりあがりの処理がミソかしら。


125:デフォルトの名無しさん
09/08/03 20:24:40
>>123
a+b+...+c=x の形になる任意の式を与えて
解いてもらうようにするにはどうすれば良いですか?

126:デフォルトの名無しさん
09/08/03 22:34:53
>119 みたく答えになりうる値を全部列挙するワケにはいかないだろうから
モジュール使うほうが良いんじゃないかな

?- use_module(library('clp/bounds')).
?- 3 + X + 4 #= 19.
X = 12.

っていうか、Prologってこのスレで扱って良いものなのかな

127:デフォルトの名無しさん
09/08/04 07:35:13
>>123
さんくすです。swi-prologをインストールして勉強することにします。

128:デフォルトの名無しさん
09/08/04 15:00:08
>>126
他の言語よりも分かりやすく短く書けるのならそれはLL

129:デフォルトの名無しさん
09/08/04 15:04:26
この手の問題だと、論理型が得意だったって事

130:デフォルトの名無しさん
09/08/04 16:16:06
読めないからよく解らんのだが、119のコードって他言語に直訳できないの?

131:デフォルトの名無しさん
09/08/04 16:20:03
アセンブリ

132:デフォルトの名無しさん
09/08/04 16:24:23
119って式が変わったら毎回書き換えるしかないんかな

133:デフォルトの名無しさん
09/08/04 16:35:08
>>130
URLリンク(miko.org)

134:デフォルトの名無しさん
09/08/04 17:31:52
汎用性は無いだろうね
ただコード自体が式を列挙してるようなコード…つまり入力データみたいなコードだから
Prolog的には下手なことするより最適な方法かも知れん

135:デフォルトの名無しさん
09/08/04 19:06:45
>>130
論理型言語を、そうでない言語に直訳
するのは基本的に無理。

論理型言語には、処理順序とかまったく
ないし、根拠となる条件式に基づいて
解を求めることしかできない。


136:デフォルトの名無しさん
09/08/04 19:09:31
>>132
式を他の言語で解釈して、
ソースを機械生成すれば。


137:デフォルトの名無しさん
09/08/04 19:16:27
>>135
じゃあロンリー型言語は?

138:デフォルトの名無しさん
09/08/04 20:37:13
ロンリーロンリーロンリーロリー

139:デフォルトの名無しさん
09/08/04 20:51:06
TOMOちゃんじゃないか!

140:デフォルトの名無しさん
09/08/04 23:09:17
どっちにしろマシン語になるんだから、無理なわけないだろ。

141:デフォルトの名無しさん
09/08/04 23:14:19
>>140
誰がそんな話をしたんだろうか
ある言語を使うってことは、その言語の制約内のことしかできないってことだと単純にわかるだろ

ここで話題に上がるような言語は、大概昔ラリーさんだかが言った、
「簡単な事は簡単に、難しいことは可能に」
って作られてるから、とりあえず何でも可能な気がするだけだ。

142:デフォルトの名無しさん
09/08/05 00:59:56
どっちかっつーと、Prologは制御可能なフレームワークって感じ。

普通の言語は流れそのものを書くが、Prologの場合は
基本的な流れはProlog処理系が既に持ってて、ちょいと書くだけである程度勝手に動くものを
コードで制御してやると流れが変わって、複雑な動作ができる。

だから元々Prologが持ってる流れに近い動作は簡単に、遠い動作は面倒になるし
流れそのものが明快なものに対しては、それをそのまま書けば良い手続き型言語に対して
「既にある流れをどう変えればその流れになるか」と考えなくちゃいけないからしんどい。

143:デフォルトの名無しさん
09/08/05 02:45:30
>>142
PrologはDSLの一種と使った方が良いと思う。
正規表現とかSQLとかの仲間。

144:デフォルトの名無しさん
09/08/06 09:19:46
とはいってもPythonにprologモジュールが入ったりすることはないよね
広めたかったら他のプログラミング言語用のライブラリだ、って割りきっちゃったほうがいいのかな

145:デフォルトの名無しさん
09/08/06 09:42:30
On LispにLispで書かれたprologが載ってたな。
結構すくないコードで書かれてたよ


146:デフォルトの名無しさん
09/08/06 10:31:24
何気に欲しいな、Prologモジュール

147:デフォルトの名無しさん
09/08/06 17:31:14
何気に欲しいな、Prologモジュール

148:デフォルトの名無しさん
09/08/06 19:11:44
>>147
インストール済みのPrologを利用する
薄いラッパーだったら、自分ですぐ
作れんじゃね?


149:デフォルトの名無しさん
09/08/06 23:29:52
>>147
Python で作る Prolog 処理系;;URLリンク(www.okisoft.co.jp)


150:デフォルトの名無しさん
09/08/11 06:15:54
保守

151:デフォルトの名無しさん
09/08/11 18:56:52
Pythonって何で「普通に」文字列内で変数展開できないの?
3.0でもformat()とlocal()必要だし。どういう方針なんだろ。誰かおしえて。
これさえできればPython使いたいんだけど。

152:デフォルトの名無しさん
09/08/11 20:15:54
文字列内での変数展開なんて一部LLを除いたらおもいっきり邪道だと思うが。
PythonはReconstruct Cを目指した正統派LLというポリシーだからなあ。

153:デフォルトの名無しさん
09/08/11 21:55:00
LLといってもいろいろあるけど、変数展開はスクリプト言語的な機能だよな。
位置づけ的には
Java系カッチリ言語 <- Python ... Ruby . Perl -> シェルスクリプト系テキトー言語

154:デフォルトの名無しさん
09/08/11 22:10:23
変数展開があると、普段から変数に変な記号つくしな。

155:デフォルトの名無しさん
09/08/11 22:20:26
>>154
なにその間違った理解

156:デフォルトの名無しさん
09/08/12 10:04:38
>>151
>Pythonって何で「普通に」文字列内で変数展開できないの?
なんでだろうね。
Rubyのように文字列中に任意の式を埋め込めるようにするには、パーサをおもいっきり書き換える必要があるからめんどくさいけど、
変数展開ぐらいならできてもいいよね。
s = "x=${x}"
とか。
s = "x=%{x}" % locals()
とかかっこわるいわ。

157:デフォルトの名無しさん
09/08/12 11:29:20
>>151
tempita

158:デフォルトの名無しさん
09/08/12 11:33:11
eval

159:デフォルトの名無しさん
09/08/12 15:28:26
「変数展開をしないで文字列を書くときはシングルクォーテーション」とか
文字列書くときのルールを無駄に増やすのはPythonらしくない

それに比べりゃlocals()かっこわるいなんてw

160:デフォルトの名無しさん
09/08/12 15:30:47
>>159
> 文字列書くときのルールを無駄に増やすのはPythonらしくない

なんという・・・クマー

161:デフォルトの名無しさん
09/08/12 18:57:24
>>159
r"..." とか u"..." とか """...""" とかあるのに、なにがPythonらしくないだよ
信者乙

162:デフォルトの名無しさん
09/08/12 20:06:05
Python-Devでは5年以上前に議論された話題だよ。
変数展開はいつ評価するの?パース時?それとも実行時?
gettextと組み合わさったときはどういう挙動するの?そのほかの文字列メソッドとは?
セキュリティも怖いよね?

結局、文字列に format() メソッドを追加するのが一番汎用的で強力。
変数展開は str.format() よりも限定した状況にしか対応できず、
そんな限られた状況で 「format(vars())」 程度のタイプ数を削減するためだけに
言語規則を複雑にするメリットを見いだせなかったので却下された。

163:デフォルトの名無しさん
09/08/12 21:05:52
> gettext…
意味わからん。
変数展開って言語構造レベルの機能だから
メソッドには展開後の文字列が渡るだけでしょ

164:デフォルトの名無しさん
09/08/12 21:16:43
>>163
"$foo value is $bar"
というメッセージを国際化したくなったとき
gettext("$foo value is $bar")
って出来ないでしょ?
str.format() メソッドなら
gettext("{0} value is {1}").format(vars())
できる。 .format() の方が汎用的。

165:デフォルトの名無しさん
09/08/12 21:55:06
>>164
gettext('$foo value is $var');

166:デフォルトの名無しさん
09/08/12 21:58:38
>>165
gettextっていうのは渡された文字列をキーにして、
現在の言語の翻訳文を持ってくる。
それだとgettext()に渡される前に変数展開されてしまうから、
キーとして利用不可能。

167:デフォルトの名無しさん
09/08/12 22:07:08
>>166
リテラルの変数展開は普通、展開・非展開を使い分けるための記法が用意されてる。
PHP なんかだと ' では変数展開されず、" では展開される。

168:デフォルトの名無しさん
09/08/12 22:10:39
ただ結局HTMLみたいなののためなら、
テンプレートエンジン使う→変数展開イラネって話になる。

169:デフォルトの名無しさん
09/08/12 22:35:12
ほー、sprintf()じゃなくて%なのか。
perlにもformat/write有るけど、ほとんど使われてないね。
仕様がアレだからか。

170:デフォルトの名無しさん
09/08/12 22:36:37
で gettext() なんか使わないほうがよい?


171:デフォルトの名無しさん
09/08/12 23:31:05
使うのは構わんけど、そういうのに限って英語も日本語も中途半端なソフトが出来上がるからなあ。

172:デフォルトの名無しさん
09/08/12 23:55:17
>>162
>変数展開はいつ評価するの?パース時?それとも実行時?
解析はパース時、値の評価は実行時。
つまり "foo=${foo}." というリテラルがあればパース時に "".join(("foo=", str(foo), ".")) に変換してくれればそれでいい。
#いくらなんでも、これくらいのことがわからないPython開発陣ではないだろ。162は分かってないかもしれないけど。

>gettextと組み合わさったときはどういう挙動するの?そのほかの文字列メソッドとは?
>セキュリティも怖いよね?

どれも意味不明。セキュリティって何だよ。変数の埋め込みができたらセキュリティ上問題になるのか。珍説すぎる。
自分ででっちあげた理由を、さもPythonでの公式見解みたいな言い方するのはやめて。自分だけの仮説なら、そうとわかる書き方にしようぜ。

> 結局、文字列に format() メソッドを追加するのが一番汎用的で強力。
> 変数展開は str.format() よりも限定した状況にしか対応できず、
> そんな限られた状況で 「format(vars())」 程度のタイプ数を削減するためだけに
> 言語規則を複雑にするメリットを見いだせなかったので却下された。

これソースある?実際に却下されたというソースがみたい。
それから変数を埋め込みたいのは、タイプ数削減もあるけど、わかりやすさ・読みやすさのためでもあるんだけどな。たとえば
"{0}: not found (file={1}, line={2})".format(name, file, line) より
"${name}: not found (file=${file}, line=${line})" のほうがわかりやすい。
もちろん短いことも重要。
"{name}: not found (file={file}, line={line})".format(**locals()) ← これ、いけてないよな。実行時にパースしてるから遅いし。


173:デフォルトの名無しさん
09/08/13 00:04:39
>>164
>"$foo value is $bar"
>というメッセージを国際化したくなったとき
>gettext("$foo value is $bar")
>って出来ないでしょ?

gettext()使うときに、だれもこんなことしないって。gettext()の引数はキーなんだから、こんなところで埋め込もうとは誰も考えない。
こじつけもいいところ。
str.format()のほうが汎用的なことと、埋め込み文字列がほしいこととは別の話だよ。
.format()をなくしてかわりに埋め込み文字列を導入しようという話ではない。
.format()もいいけど埋め込み文字列も欲しいよねという話なんだけど、信者にはわかってもらえなさそう。



174:デフォルトの名無しさん
09/08/13 00:05:08
ところで、最近なんでRubyが失速してきたんだ?
RoRバブルの崩壊でJAVA・PHP・Pythonあたりへの対抗力の限界が露呈された、ってところ?

175:151
09/08/13 00:09:36
うおおお、なんかみんな語ってる!
やっぱり言語仕様を複雑にするほど必要としてないって判断なんですかね。

まあ、オライリーのPythonチュートリアルで勉強中ですが、
クラス部分の実装の仕方に惚れたので、Python使ってこうかと思います。

あと、Pythonは正規表現がモジュールってところがいいですね。

176:デフォルトの名無しさん
09/08/13 00:15:16
そもそも、変数展開ってそんなに使う?

177:デフォルトの名無しさん
09/08/13 00:23:00
俺はPerlでもsprintf、RubyでもString#%使うなぁ

178:デフォルトの名無しさん
09/08/13 00:27:33
複雑に変数を埋め込むような場合は普通の文字列連結よりは見やすくなるね。
でも当然文字列のパースが入るからパフォーマンスコストは数倍になる。
最初は変数埋め込みばっかしてたけど最近は極力使わないようにしてる。

179:デフォルトの名無しさん
09/08/13 00:45:17
文字列のパース?そんなんコンパイル時だけだろ
パフォーマンスにほとんど影響しない

180:デフォルトの名無しさん
09/08/13 00:46:48
え?

181:デフォルトの名無しさん
09/08/13 00:48:00
Python的にTemplate/substitute機能ってどうなん?

182:デフォルトの名無しさん
09/08/13 01:32:35
>>167
ああ、そういう意味ね。で、結局gettext()で得られたメッセージに対する
変数展開は行われないんだ。

Perlみたいな変数展開を .format() や % で置き換えることはできるが、
逆は不可だ。言語仕様としても、 .format() や % は通常のメソッドや
演算子オーバーロードの範囲で実現できるのに対して、Perlみたいな
変数展開は言語仕様を汚さないと実現できない。

183:デフォルトの名無しさん
09/08/13 01:37:46
>>182
gettextで得られたメッセージに対する変数展開ってどういう意味?

184:デフォルトの名無しさん
09/08/13 01:53:02
勝手にやられるとうざいから、formatが良い落としどころだと思うけどな。

gettextって
print _("hoge: %s, %s") % (x, y)
ってやるだろうから、こいつに関しては展開要らない。

シェルスクリプトなら変数展開ほしいけど、pythonでほしいと思ったことってあんまり無い。
複雑になるなら"%(name)s" % locals()とかテンプレート使うなりする。
(awkでもprint "hoge" $1 "hoge" でいいし、、ちょっと複雑になってもprintfで事足りる)

185:デフォルトの名無しさん
09/08/13 01:58:30
>>172
URLリンク(www.python.org)
が Reject されて
URLリンク(www.python.org)
になった。詳しい議論はMLの過去ログ参照。
変数展開に能力を与えすぎると複雑だったり危険だったりするし、
能力を限定するとわざわざ言語仕様を汚す価値が無くなるので、
%とtemplateクラスの使い分けで十分と判断された。

186:デフォルトの名無しさん
09/08/13 07:32:13
>>178
>でも当然文字列のパースが入るからパフォーマンスコストは数倍になる。

やっぱりこいつわかってないよ。文字列リテラルが変数埋め込みをサポートしている言語なら、
コンパイル時に一度行なわれるだけだから、パフォーマンスに影響なんかあるわけない。
「パフォーマンスコストは数倍になる」とか無知もいいところ。

実行時に毎回パースして遅くなっているのは format() のほうだろ。
"{foo} is {bar}".format(**locals())
これをformat()が毎回パースしてるんだから、パフォーマンスコストが悪いのはどう考えてもこっちのほう。
Perl の "$foo is $bar" のように文字列リテラルが変数埋め込みをサポートしている言語なら、
コンパイルした時点ですでにパースは完了しているので、毎回パースする必要なんかない。

ところでセキュリティーの解説はまだなの? なんで変数の埋め込みができるとセキュリティ上問題になるの? 
しっかり解説たのむぜ>>162


187:デフォルトの名無しさん
09/08/13 09:45:18
変数埋め込みだからセキュリティー上問題っていうのは何かあるのかな
意図しない埋め込みが起こるかもしれないぐらい?

188:デフォルトの名無しさん
09/08/13 09:49:21
sprintfやformatではおこらない、何か

189:デフォルトの名無しさん
09/08/13 10:03:34
変数埋め込みがセキュリティ的に危ないのなら、LLに限らずどの言語も危ないことになるな
すばらしい発見なのでさっさと報告してくれ

190:162
09/08/13 10:33:50
>>186
>>178 は俺じゃねーよ。

Python-dev では変数展開がプロポーズされてから、>>162のような議論があった、
というだけの話だよ。別にPerlやRubyや>>186の提案している仕様に脆弱性がある
というわけじゃなない。詳しく知りたかったら2002年の1月と6月のPython-dev過去ログ読め。
以下てきとうに要約。

*どの変数を展開するのかが実行時に決めると、安全じゃない文字列に対して危険
*なので導入するとしたらコンパイル時に $"${foo + bar} is $baz" が
(str(foo + bar) + " is " + str(baz)) に変換されるという仕様はどうだ。
これならセキュリティの問題は無い。
*でも、 % に比べると変数展開時にどの範囲の変数が利用されるのかわかり難いよね
*そんな仕様じゃgettextみたいなケースで使えない
*gettextを、 gettext("$foo is $bar", foo=hoge, bar=hage) みたいな仕様にしたら?
*言語仕様汚してそんな汎用性の無い機能入れるより、汎用的なテンプレートライブラリ
入れたほうがマシだ。

あと、MLでの議論の結果変数展開の代わりに選ばれたのは .format() や % のほうじゃなくて
Templateのほうで、こいつを使うとパースは一回で済むから、繰り返し使う場合は
こっちを使うべきだな。

191:デフォルトの名無しさん
09/08/13 17:46:35
PEP292でPEP215のセキュリティに言及してる部分がさっぱり分からん。
いやみっぽく書かれてるのは分かるけど。

192:デフォルトの名無しさん
09/08/13 17:50:46
いやだから gettext で変数展開は使わんと何度いったら…

193:デフォルトの名無しさん
09/08/13 18:29:14
>>192
だから、gettextでは使わないみたいに使える状況が限定される
変数展開より、広い状況で使える Template の方が良いよねっていう
議論をしてるんだってば。

194:デフォルトの名無しさん
09/08/13 18:37:46
>>193
意味がわからん。

それとも単に歯応えしたいだけ?

195:デフォルトの名無しさん
09/08/13 19:58:25
意味がわからん。

196:デフォルトの名無しさん
09/08/13 20:10:00
いい歯ごたえ!

197:デフォルトの名無しさん
09/08/13 20:13:48
リテラルでしょ?
たとえば、辞書のキーに使うこともあんまり無いだろうし、
特に問題無さそうだけどね。

198:デフォルトの名無しさん
09/08/13 20:21:21
歯応えwwwwwwwwwwwwwwwwwwwwww

199:デフォルトの名無しさん
09/08/13 20:49:49
マジレスすると、口答えと歯向かう、がごっちゃになったんだろ
どっちも上から目線ではあるけど、それは敢えてだろうな

200:デフォルトの名無しさん
09/08/13 21:01:13
言いたいことは察せられる
「噛みつく」なら適切かと思う。表現って難しい

201:デフォルトの名無しさん
09/08/13 22:23:24
>186-189
C言語のprintfにはセキュリティホールがあるけど
LLでその書式文字列攻撃がどこまで応用効くか俺は判らんな。
ただ、printf/sprintf/format/% の書式指定文字列に変数埋め込みを使っちゃうと
予想外の挙動を招いてしまう可能性が高いのは間違いないよ。

202:デフォルトの名無しさん
09/08/13 23:37:55
そういや、ここのPythonユーザはみんな3.x使ってるの?
俺は本業Java趣味Pythonってこともあって、今日から移行することにしたんだが。

203:デフォルトの名無しさん
09/08/14 00:01:53
仕事2.5、趣味2.6だよ。
3.1は入れてあるけどほとんど使わない

204:デフォルトの名無しさん
09/08/14 03:39:07
特にprintfとprintで混乱したことは無いな。
予想外の挙動ってのがあるのか。
pythonこえー。

205:デフォルトの名無しさん
09/08/14 05:53:04
>>193
>だから、gettextでは使わないみたいに使える状況が限定される
>変数展開より、広い状況で使える Template の方が良いよねっていう
>議論をしてるんだってば。

gettext使う場合こそすごく限定されるだろ。使わない場合のほうが圧倒的に多い。
特殊な事例をさも一般的なことのように見せて反対するのはバカのすること。


>>201
>ただ、printf/sprintf/format/% の書式指定文字列に変数埋め込みを使っちゃうと
>予想外の挙動を招いてしまう可能性が高いのは間違いないよ。

それ、変数埋め込みに限った話じゃないし、変数埋め込みの欠陥ではない。

結局、なんとかしてPythonの仕様を正当化したいだけの信者にしかみえない。


206:デフォルトの名無しさん
09/08/14 09:58:41
いまのpythonにどういう風に導入したらいいと思う?
uとかrのまねして、e""みたいにすれば、影響範囲は少なそうだけど。

効率を考えなければ、Template("文字列").safe_substitute(vars())とかに置き換えればいいのか?

207:デフォルトの名無しさん
09/08/14 10:10:12
スレリンク(newsplus板)

208:193
09/08/14 11:06:30
>>205
gettextは目的が明確な専用ツールだし、言語仕様ではなくライブラリ。

それに対して、文字列に対して変数を展開するのは汎用的な要求で、
言語仕様に組み込むとすれば(PerlではなくPythonでは)できるだけ汎用に
いろんな目的に使えることが要求される。gettextと同じレイヤで語れない。

で、Templateならgettextに対応できて、Perl/Ruby方式変数展開では
対応できない。ならば汎用でしかも言語仕様を汚さないで済む方が良い、
というのがPython的な判断。

実際に string interpolation に対して gettext で使えねーと反論しているメールは
こちら。
URLリンク(mail.python.org)

209:193
09/08/14 11:20:41
ちなみに、gettextはリテラル以外の文字列に対する変数展開がほしいという
要求のわかりやすい例であって、gettextのためだけに interpolation が却下された
訳じゃないぞ。

210:デフォルトの名無しさん
09/08/14 11:30:39
>>206
既に str.format(**vars()) で実現できる以上、言語仕様を汚して15タイプを
削減する提案が通る見込みは無いだろうな。
あったらときどき便利な機能を言語仕様に際限なく組み込んでいけばPerlに
なってしまう。

211:デフォルトの名無しさん
09/08/14 16:14:51
俺的にはstr.format()で満足。信者だからかな?w

212:デフォルトの名無しさん
09/08/14 16:20:45
おまえらお盆に何やってんだ

213:デフォルトの名無しさん
09/08/14 20:13:15
センスが悪くて誰もやらないようなことを持ち出して、
それを出来ないように蓋をするのがPython流なんだと理解した。

214:デフォルトの名無しさん
09/08/14 21:25:30
はいはい

215:デフォルトの名無しさん
09/08/14 21:40:14
別に蓋してない気がするけど。元々できないんだし。

216:201
09/08/14 23:05:48
>205
俺自身はRubyがメインだし、Pythonを正当化したワケじゃなく
>186-189の疑問に判る限りで答えただけ。
何がなんでも正当化したいなら「変数展開とeval()組み合わせたら〜」とか言ってセキュリティーホールがあるって主張するし
わざわざ「printf/sprintf/format/% の書式指定文字列に変数埋め込みを」という限定を入れたりしないよ。

217:デフォルトの名無しさん
09/08/14 23:07:17
実際、変数展開ある言語だと何かもやもやするから、
Pythonにはいらんな。

218:デフォルトの名無しさん
09/08/14 23:26:36
組み合わせるまでもなく
evalだけでセキュリティホールだな

219:デフォルトの名無しさん
09/08/14 23:32:18
まあ、「何がなんでも正当化」をするなら、って話だからw

220:デフォルトの名無しさん
09/08/15 01:23:28
俺もない方がいいと思う。それこそがPythonの存在理由と思うから。Perlみたいな言語はPerlだけでいい。

221:デフォルトの名無しさん
09/08/15 04:30:09
Perl
my $price = 100;
print "price = $price";

PHP
$price = 100;
echo "price = $price";

Ruby
price = 100
print "price = #{price}"

222:デフォルトの名無しさん
09/08/15 05:32:15
JavaScript
price = 100
print "price = " + price

そろそろJavaScriptに、変数展開もsprintf相当の機能も
ないことに誰か言及してあげてもいいと思うんだ

223:デフォルトの名無しさん
09/08/15 06:58:06
>>222
ExtJS


224:デフォルトの名無しさん
09/08/15 06:59:23
>>210
>言語仕様を汚して

このへんが信者だよな。

225:デフォルトの名無しさん
09/08/15 07:09:19
全然目的が見えない。

226:デフォルトの名無しさん
09/08/15 11:00:20
JavaScriptを使う理由って、ブラウザ上で動くスクリプト言語が事実上JavaScriptしかないってだけだからな。

227:デフォルトの名無しさん
09/08/15 11:17:46
結局そこは、ブラウザの政治力学なのでしょうがない。

228:デフォルトの名無しさん
09/08/15 12:15:26
JavaScriptの近年の過大評価って、不良の善行、落ちこぼれの平均点みたいなところがあるよな。
最初はあんなにダメな子だったのに…という。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5386日前に更新/165 KB
担当:undef