トップページtech
990コメント380KB

関数型プログラミング言語Haskell Part17

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/01/02(月) 22:19:28.26
haskell.org
ttp://www.haskell.org/

日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
0083デフォルトの名無しさん2012/01/04(水) 23:55:17.37
f(g(x)) = xという形の等式が直感的に何を意味するかは慣れないと分かりにくい
でも一旦慣れれば問題なくなるし、
この内容を簡潔に表現するにはこの式しかないと思うようになる(f . g = idもあるけど)
モナド則も似たようなもんじゃね
0084デフォルトの名無しさん2012/01/05(木) 00:09:23.77
俺が分からないのはお前らのせいって言いたいだけじゃん。
0085デフォルトの名無しさん2012/01/05(木) 00:22:26.47
>>82
> だがそれはその式を単にそのまま読んだだけだと思うんだ。
> なにが言いたいんだこの式は?

全く逆だ

「x に対して2個の変換 son と father をこの順で適用したものは x と同等である」

という、たまたま今は日本語で表された 「意味」 が何よりも先に先にある
(この意味を人に伝えるには何かの言語で表す以外ないから、たまたま日本語で表した)

この意味を数式という言語で表せば father(son(x)) = x となる
この意味を英語という言語で表せば・・・
この意味をヒンドゥー語という言語で表せば・・・お任せする

モナド則も意味が先にあって、それをHaskellの式で表す方法のひとつとして >>59 がある
他にも >>68 の様に表す方法もあるし、もしその意味を日本語で表すなら・・・

ということだ
0086デフォルトの名無しさん2012/01/05(木) 00:31:08.78
もしかして数学の定義を使って証明したことがないじゃなかろうか?
0087デフォルトの名無しさん2012/01/05(木) 03:04:58.01
関手fmapと自然変換returnと自然変換joinが「モナド」になる
っていうのが一番簡潔で直接的なモナド則の書き方

>>= は \f->\g->join (fmap g f)によって定義できる二次的なもの
0088デフォルトの名無しさん2012/01/05(木) 03:54:01.40
[1] join . join == join . fmap join
[2] join . return == id == join . fmap return
0089デフォルトの名無しさん2012/01/05(木) 14:48:38.07
犬論で拳論でもいいけど、謙論を忘れずに。
0090デフォルトの名無しさん2012/01/05(木) 14:52:37.50
>>49
計算論 計算可能性とラムダ計算
買ってみようと思う。
他におすすめある?
0091デフォルトの名無しさん2012/01/05(木) 14:55:33.27
プログラミングの道具としての圏論ならばalgebra of programming一冊各種証明を手で追いながらみっちりやれば充分
0092デフォルトの名無しさん2012/01/05(木) 15:20:01.29
中古で六万かよ
0093デフォルトの名無しさん2012/01/05(木) 15:49:55.57
>>92
Amazon.com 本店(米)の中古はもっと酷い 916.21 ドル

でも、Amazon.co.uk なら中古が 20 ポンドで売ってる(国際便もあるみたい)
0094デフォルトの名無しさん2012/01/05(木) 17:09:38.32
大学講義の離散数学で単位ギリギリとった俺は>>49くらいがちょうどいいかな
0095デフォルトの名無しさん2012/01/05(木) 17:47:12.97
もしそれが恥ずかしくないのなら、>>49 でもやばいかも
0096デフォルトの名無しさん2012/01/05(木) 17:49:28.01
 ttp://blog.ezyang.com/2012/01/why-iteratees-are-hard-to-understand/

MITの学生さんだって。みな頑張れ
0097デフォルトの名無しさん2012/01/05(木) 17:53:03.61
>>91-3
どうせ大学の図書館探したら転がってるだろうから、みることは可能だろうよ。
0098デフォルトの名無しさん2012/01/05(木) 18:37:14.15
お前らは何百年同じ話を続けるつもりなんだ?
0099デフォルトの名無しさん2012/01/05(木) 18:46:42.96
あと1億年と2000年間
0100デフォルトの名無しさん2012/01/05(木) 18:51:23.55
いや、あと数年で終わらせるから待ってろ
0101デフォルトの名無しさん2012/01/05(木) 19:17:34.36
>>99
8000年過ぎた頃からもっと繰り返したくなった
0102デフォルトの名無しさん2012/01/05(木) 20:56:35.84
>>87
そうだね。
>>86
むしろ定義しか使わん。公式を使ったことはあまりないが。
>>85
>「x に対して2個の変換 son と father をこの順で適用したものは x と同等である」
数学世界の閉じこもりならそれでよいが、それでは世間と話ができんだろ。
>>84
理解できてる、理解できてない、なんてことはまあつまらんことだ。
0103デフォルトの名無しさん2012/01/05(木) 22:02:39.10
85-86への返答からだと、
何を分かってないのか分からんのじゃないかと思う。
0104デフォルトの名無しさん2012/01/05(木) 22:14:39.66
>>102
[1] モナド則の意味をできるだけ平易な日本語で表現してほしいのか、
[2] 単にライブラリドキュメントに書かれたモナド則の表現が遠回しだと言いたいだけか
[3] それ以外の事が言いたいのか

[1] なら素直にそう言え

[2] なら言いたいだけ言っていれば良い

[3] ならハッキリと意思を伝えろ
0105デフォルトの名無しさん2012/01/05(木) 22:18:19.52
この人はもう無理だろ
ネタでやってるとしか思えないぐらい質問が要領を得ない
0106デフォルトの名無しさん2012/01/05(木) 22:49:24.22
定義に従うのもいいけど、定義のないものは徹底的に無視するのも数学では重要だと思う
Haskellの範囲で定義されていないことをわざわざ調べて付け足す必要はない
0107デフォルトの名無しさん2012/01/05(木) 23:04:55.33
モナドじゃないけど、adjunctionの定義は「何が言いたいんだ?」ともどかしかったなあ。
あのhom(FY,X) = hom(Y,GX)という定義式がなぜねじれた形になってるのか、
ずっと疑問だった。
0108デフォルトの名無しさん2012/01/06(金) 10:40:36.54
腐: ホモだから
0109デフォルトの名無しさん2012/01/06(金) 10:59:56.72
ほむほむ
0110デフォルトの名無しさん2012/01/06(金) 12:54:31.23
随伴なんて単なる関手の圏における同型な対象にすぎない
0111デフォルトの名無しさん2012/01/06(金) 15:20:01.72
ttp://ja.wikibooks.org/wiki/Haskell/%E5%9C%8F%E8%AB%96
圏論知らないなりに↑の説明読んだんだけど、
>モナド は圏から同じ圏へいくつかの追加の構造を提供する特殊な関手
ってところにちょっと引っかかったので2点質問させてください。

1.例えばInt と Maybe Intは別の圏に存在する対象だと読みながら勝手に想像してたんだけど、
この説明からいくと同じ圏に属していると考えてOK?
あるいは、Dまでいかない、C'ぐらいの内部的な圏みたいな概念がもしかして存在する?

2.Haskellにおいて圏から別の圏への変換にあたる操作って、具体的には何なんでしょう?
0112デフォルトの名無しさん2012/01/06(金) 16:06:41.22
1.同じ圏の対象とも別の圏の対象とも考えることは可能。
そのリンク先ではHask圏という、Haskellの型が対象で関数の値が射とする圏を考えているので、
その文脈の限りではIntとMaybe Intは同じ圏の対象だと考えて良い。

2.Functor型クラスがHask圏からHask圏への変換(自己関手)を表現していると考えられる。
class Functor (f :: * -> *) where
fmap :: (a -> b) -> (f a -> f b)
この定義の内、f :: * -> *のところがHask圏の対象である型を、別の型に写像する関数を表現している。
また、fmap :: (a -> b) -> (f a -> f b)のところが射を写像する関数を表現している。
0113デフォルトの名無しさん2012/01/06(金) 16:15:39.92
>>112
ありがとうございます、1については多分納得しました。
2は質問が悪かったです。
自己関手ではなく、明確に別の圏と考えられるものに変換しているような関手の具体例が
Haskellにあれば教えて欲しかったのです。
0114デフォルトの名無しさん2012/01/06(金) 16:31:14.92
普通の型と[a]のようなリスト型が別の圏の対象であると解釈すれば
Functor型クラスが別の圏に変換する関手だ、と考えることもできるよ。
何を圏と考えるかの問題。
0115デフォルトの名無しさん2012/01/06(金) 16:36:15.59
>>114
書いてから、何を圏とするかで変わるよな、とは思ったのですが意図を汲み取って頂けて嬉しいです。
Hask圏で考えると、Haskellにおいて別の圏にあたる概念はなさそうですね(?)。
0116デフォルトの名無しさん2012/01/06(金) 16:45:49.97
>>107
それ俺も分からない。なぜ?
0117デフォルトの名無しさん2012/01/06(金) 16:48:49.32
Hask圏のサブセットを別の圏と考えたりして色々考えることはできそう。
0118デフォルトの名無しさん2012/01/06(金) 20:58:56.44
?一気にレベル上がったな
>>115
よくわからんが、型を集合(Set圏の対象)と考える場合、HaskellのFunctorは
型から型(集合から集合)への対応で、Set圏で完結していると考えられるから
基本無理なんじゃない?
あるとしたら集合からなにか別の対象を構成して圏自体を構成するとか必要になるのじゃないかと思う。
0119デフォルトの名無しさん2012/01/06(金) 21:59:44.43


 東京にある6つのキー局の内、製作から財務まで一貫して朝鮮人が行ってるテレビ局が1つ
 中国共産党から毎年大量の反日工作費が流れているテレビ局が2つ
 もろに北朝鮮と繋がっているテレビ局が1つ  
年寄はまだまだテレビという外国人に騙され続ける
0120デフォルトの名無しさん2012/01/06(金) 22:17:19.97
>>116
>>110
0121デフォルトの名無しさん2012/01/06(金) 22:37:50.72
説明してくれ。
0122デフォルトの名無しさん2012/01/07(土) 01:57:09.16
まだやってんのか?
0123デフォルトの名無しさん2012/01/07(土) 13:33:31.17
>122
Let's join us!
0124デフォルトの名無しさん2012/01/07(土) 14:49:07.40
>>59
[1] flip(>>=) f . return == f
[2] flip(>>=) return . f == f
[3] flip(>>=) g . flip(>>=) f == flip(>>=) (flip(>>=) g . f)
この定義から分かることは
f と g と return には flip(>>=) を適用できること
flip(>>=) f の戻り値の型は f の戻り値の型と同じ (引数の型だけ変わる) ということ

つまり、戻り値の型は変えられないが引数の型は変えられるようなものを表現したいんだと思う
0125デフォルトの名無しさん2012/01/07(土) 15:59:51.70
>>124
うん。勿論[1]-[3]は、>>=やfなどの型についてのそういう制約を前提にして
いるが、[1]-[3]はそれ以上の条件を表現しているよね。
0126デフォルトの名無しさん2012/01/07(土) 16:31:12.63
>>125
== が成立する条件が難しいと思う
f==g なら f の型と g の型は等しいとは思うが、それ以上は難しい
0127デフォルトの名無しさん2012/01/07(土) 23:46:02.70
== を「型が等しい」と解釈するならモナド則は自明
別の意味があるなら == を定義するべき
0128デフォルトの名無しさん2012/01/08(日) 09:04:29.08
>>107 >>110
hom(X,Y) = hom(FX,FY)
0129デフォルトの名無しさん2012/01/08(日) 10:07:40.92
それはほむ関手と普通の関手Fの合成関手
0130デフォルトの名無しさん2012/01/08(日) 10:39:44.40
Y:=(1/F)W
0131デフォルトの名無しさん2012/01/08(日) 11:54:54.22
式だけ書いておけば後は汲みとれるはずだというやつは本当に大嫌いだ。
まさしくクソメン。
0132デフォルトの名無しさん2012/01/08(日) 12:05:09.42
>>131
だからさ、詳しく説明して欲しいのなら素直にそう言えって何度言ったら・・・

説明を求めていないのなら無視しろよ
0133デフォルトの名無しさん2012/01/08(日) 12:08:42.39
ほむの中でFが増殖する気持ち悪い関手
0134デフォルトの名無しさん2012/01/08(日) 12:10:29.13
違うね。これはそういう問題じゃない。
それに無視して暗に黙認を形成することは少なくとも俺には絶対にできない。
そういう表明だ。
0135デフォルトの名無しさん2012/01/08(日) 12:16:57.29
そもそもスレチだ。
0136デフォルトの名無しさん2012/01/08(日) 12:17:54.40
>>134
黙認しないのなら、しっかり質問しろ

お前は「嫌いだ」としかまだ言っていない
嫌いだと表明するだけでは残念ながら何も起きないぞ

式だけ書いておけば・・・と言っておきながら、
その式について何も訊いていないだろ
>>130 にとっては、お前がこの式の何が分からないのかが分からない状態だと思うが
0137デフォルトの名無しさん2012/01/08(日) 12:21:07.73
もう構うなよ…
この人は自分で調べないから絶対に具体的な質問出来ない人だよ
0138デフォルトの名無しさん2012/01/08(日) 12:24:51.53
>>136
何か起こす?そんなの期待してるから何も出来ないんだよ。

そもそも圏論はスレ違いだ。
0139デフォルトの名無しさん2012/01/08(日) 12:32:03.12
別に説明して欲しい訳じゃなくて、>>130のやりかたがコミュニケーションとして酷いといってるんじゃないの
0140デフォルトの名無しさん2012/01/08(日) 12:34:44.10
けんかはやめてくれ。みんな俺が悪いんだから。
0141デフォルトの名無しさん2012/01/08(日) 12:49:17.63
わかればいいが、普段からそんな話の展開をしてるなら改めたほうがいい。
0142デフォルトの名無しさん2012/01/08(日) 13:05:02.48
>>141
不粋だな
0143デフォルトの名無しさん2012/01/08(日) 13:07:29.45
template haskellの機能を使ってモジュール内で定義されてる関数の名前全部取得するような事ができるみたいなんだよ
これをどうやって実現してるかというと、どうやら展開時に自分自身が記述されてるファイルをIO使って読み込んで解析してるらしい
よく聞くコンパイルタイムIOという空恐ろしいものはこうやって使うのかといういい実例だと思ったね
0144デフォルトの名無しさん2012/01/08(日) 13:15:03.18
>>143
template haskell って地味に良い拡張機能だよな
HaskellDB で使って実感したわ


対応した IDE ができるともっと良いが
0145デフォルトの名無しさん2012/01/08(日) 13:20:27.44
まともなIDEがない時点でC以下
0146デフォルトの名無しさん2012/01/08(日) 14:15:39.33
IDE で C と比べたって意味無いよ

IDE で言語選ぶわけじゃないし
0147デフォルトの名無しさん2012/01/08(日) 14:16:43.08
ghc-modじゃ不足でしょうか、、、
0148デフォルトの名無しさん2012/01/08(日) 14:55:26.81
文句あるなら造れ
そして英雄となれ
0149デフォルトの名無しさん2012/01/08(日) 14:56:05.77
IDEで言語選ばないの?
あなたはIDEで言語を選ばないの?
多くの人はIDEで言語を選ばないの?
すべての人はIDEで言語を選ばないの?
0150デフォルトの名無しさん2012/01/08(日) 15:02:26.58
ドカタが仕事にありつける言語にはIDEがある、が正解
0151デフォルトの名無しさん2012/01/08(日) 15:03:00.33
量化を取り除くと自己言及の誤謬に陥るのでNG
0152デフォルトの名無しさん2012/01/08(日) 15:15:52.21
>>147
ghc-mod って、template haskell に対応してたっけ

たとえば、Template haskell のチュートリアルに

-------------------------------
module TupleReplicate where
import Language.Haskell.TH
tupleReplicate :: Int -> Q Exp
tupleReplicate n = do id <- newName "x"
return $ LamE (VarP id)
(TupE $ replicate n $ VarE id)
-------------------------------

という例がある

$(tupleReplicate 2) が a -> (a, a) という型の関数
$(tupleReplicate 3) が a -> (a, a, a) という型の関数
と ghc-mod は教えてくれる?

言っておくが、ghc-mod がクソとか役に立たんと言ってるわけではない
0153デフォルトの名無しさん2012/01/08(日) 15:19:15.80
>>152
やったことないです、、、
@kazu_yamamotoさんに聞いてみルトいいかも
0154デフォルトの名無しさん2012/01/08(日) 15:25:29.61
IDE有る無しで開発効率に影響するのなら、
もちろん言語選択時に考慮するだろ
0155デフォルトの名無しさん2012/01/08(日) 15:27:02.91
統合開発環境の「統合」って、最近流行った「絆」と同じセンスだよね
0156デフォルトの名無しさん2012/01/08(日) 15:36:00.48
C#とかは言語設計段階からIDEと相性良くなるように考えられてると感じる
0157デフォルトの名無しさん2012/01/08(日) 15:40:42.17
>>152
foo = $(tupleReplicate 2)と展開した上で名前に束縛すればfooについて当然型名がかえって来るけど
確かhaskellのインタプリタ(not ghci)が走ってるプロセスを持ってて
バッファの内容を食わせた上で指定した文字列でそいつに問い合わせてるから、
トップレベルで名前を持ってない定義だと上手く参照してくれないんじゃないかと思う
0158デフォルトの名無しさん2012/01/08(日) 15:59:20.60
勝って兜の緒を締めよ開発環境
0159デフォルトの名無しさん2012/01/08(日) 17:11:37.66
>>118
> よくわからんが、型を集合(Set圏の対象)と考える場合、HaskellのFunctorは
> 型から型(集合から集合)への対応で、Set圏で完結していると考えられるから
> 基本無理なんじゃない?

結局は、解釈、モデル化の仕方の問題だけど、
関数以外のArrowクラスのインスタンスを射として考えるならば、
それはHask圏=Set圏の射ではないから、
Hask圏の部分圏と考えることはできない圏を考えていることになる
0160デフォルトの名無しさん2012/01/08(日) 19:13:49.14
震災前

     /::::::::::::::::::::::::::::::;;::ノ ヽ;::\
    /::::::::;;;;;;;;;,,,;;...-‐''"~    ヽ:;::l
     |:::::::::::|    岡田 異音    |ミ|
     |:::::::/     ,,,  ヽ,、   '|ミ|  
     '|:::::::l    '''""   ゙゙゙゙`   |ミ|
       |:::::|.  ,,r ‐、   ,, - 、  |/
     ,/⌒|  ノ ・ _), (. ・ `つ|
     | (   "''''"    |"'''''"  | 
      ヽ,,.        ヽ    |
       |       ^-^_,, -、   |   
         |    _,, --‐''~    ) |  マニフェストもう守れない。どうしよう・・・・ 
         'ヽ  (   ,r''''''‐-‐′ / 


震災後

     |:::::::::/            |ミ|
     |::::::::|   ,,,,,    ,,,,,   |ミ|
     |彡|.  '''"""''   ''"""'' |/
     /⌒|  -=・=‐,   =・=-  |
     | (    "''''"   | "''''"  |  
     .ヽ,,         ヽ    .|  キリッ
        |       ^-^    |
   .     |     ‐-===-   |   大震災が起こったのだからマニフェストの破綻も致し方ありません
         ,\.    "'''''''"   / 
朝鮮民主党
     おわり
0161デフォルトの名無しさん2012/01/09(月) 20:15:30.30
すっごい初心者ですまないんだけど

x=10
x=11

これってHaskellでどう書くの?
0162デフォルトの名無しさん2012/01/09(月) 20:19:11.15
書けない
0163デフォルトの名無しさん2012/01/09(月) 20:36:13.49
>>161
関数型は変数の意味が違うよ。適当な教科書を読んでみましょう
0164デフォルトの名無しさん2012/01/09(月) 20:41:21.78
こう書くんだよ

main = do
let x = 10
let x = 11
print x
0165デフォルトの名無しさん2012/01/09(月) 21:27:31.04
>>164
サンクス
0166デフォルトの名無しさん2012/01/09(月) 23:34:33.20
>>164をこう↓できると思ったんだけど無理だった、何故?
main =
 let x = 10 >>
 let x = 11 >>
 print x
0167デフォルトの名無しさん2012/01/10(火) 00:08:36.44
>>166
do
let ***
###

これは、プリプロセッサで次のように変換される

let *** in do ###

これを踏まえて考えれば・・・
0168デフォルトの名無しさん2012/01/10(火) 07:53:20.13
2-3 Finger Tree を閃いた奴、発想が良いな
0169デフォルトの名無しさん2012/01/10(火) 09:41:18.37
民主党には朝鮮人など外国人のなりすまし、スパイが約90名在籍している

野田内閣は過半数が帰化人

野田はどうだろうか
韓国人から賄賂を貰い、韓国人の集いに出席している野田は
0170デフォルトの名無しさん2012/01/10(火) 15:47:47.65
>>158
東郷開発環境wwwwwww



って誰か言ってくれると思ったのに。。。
0171デフォルトの名無しさん2012/01/10(火) 19:42:08.90
申し訳ありませんでした

東郷開発環境wwwwwww
0172デフォルトの名無しさん2012/01/10(火) 20:31:46.91
G13型トラクターか...
0173デフォルトの名無しさん2012/01/11(水) 03:08:02.86
東郷開発環境wwwwwww
0174デフォルトの名無しさん2012/01/11(水) 18:47:00.09
論理的な発想ができない連中がなぜHaskellのスレッドにいるのか不思議。
0175デフォルトの名無しさん2012/01/11(水) 18:55:22.75
論理的思考と等式推論を使えることに相関は無い
0176デフォルトの名無しさん2012/01/11(水) 19:22:23.15
>>167
こうか
main =
 let x = 10
 in let x = 13
    in print x

つーかこの式って(>>)か(>>=)を使って表現出来ないの?
副作用にはモナドを使うんじゃないの? わかんないです><
0177デフォルトの名無しさん2012/01/11(水) 19:25:03.27
>>175
勝手に変な方向に誘導するなよ
>>174 は論理的な思考ではなく「発想」と言っている

発想、つまり ヒラメキ☆ だ
0178デフォルトの名無しさん2012/01/11(水) 19:25:13.02
letはλ抽象でモナドを使った式は関数適用
ラムダ計算の項としてみたら全く別物
0179デフォルトの名無しさん2012/01/11(水) 19:32:06.33
>>176
そう

最後の print 関数が副作用を持っている
だから「この」 main関数の型は IO () だ

君はちゃんと副作用にはモナドを使っているんだよ
なにが分からん?

> つーかこの式って(>>)か(>>=)を使って表現出来ないの?

もしかして、こういうこと?

main = return 10 >> return 13 >>= print
0180デフォルトの名無しさん2012/01/11(水) 22:20:24.86

800 自分:名無し募集中。。。[] 投稿日:2012/01/08(日) 22:00:50.04 0
AKBブーム捏造の裏

サウンドスキャンの売り上げでさえほとんどが業者の自社買い他社買いで
資金洗浄した金額がオリコンの枚数×CDの価格って感じかね
http://livedoor.blogimg.jp/dqnplus/imgs/f/f/fff69a26.jpg

0181デフォルトの名無しさん2012/01/11(水) 23:18:15.23
>>176

同じことをC言語で書くとこんな感じ

void main() {
 const int x = 10; {
  const int x = 13; {
   printf("%d", x); }}}

副作用があるのは最後のprintfだけ。
途中のx=13は代入ではなくてたまたま名前が同じ新しい定数の定義。
0182デフォルトの名無しさん2012/01/11(水) 23:52:21.03
Haskellでオブジェクト指向ってどうやるの?
■ このスレッドは過去ログ倉庫に格納されています