トップページtech
1002コメント372KB

関数型プログラミング言語Haskell Part29 [転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001岡部メモリリーク健2015/07/14(火) 19:27:09.01ID:jJ1YDtNe
関数型プログラミング言語 Haskell について語るスレです。

         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    < 毛の壁(岡部健)の話は禁止な
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\

haskell.org (公式サイト)
http://www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part28
http://peace.2ch.net/test/read.cgi/tech/1428535861/
0153デフォルトの名無しさん2015/07/28(火) 21:54:20.49ID:d4M8qnVV
>>152
日本語でOK
0154デフォルトの名無しさん2015/07/28(火) 22:15:38.33ID:uKnSRdVu
我想喝啤酒!
0155デフォルトの名無しさん2015/07/28(火) 22:49:30.17ID:MQ4Zq0Y1
Haskellは無料で遊べちまうけど需要のあるJSは徹底的に課金するべき
0156デフォルトの名無しさん2015/07/28(火) 23:02:16.25ID:2DleteTo
ビールといえば、資源ごみ捨てないと…
0157デフォルトの名無しさん2015/07/30(木) 13:15:34.02ID:XKVzkpKt
ghcの新型出るんですか?
0158デフォルトの名無しさん2015/07/31(金) 14:52:35.97ID:gTceL3gJ
毛の壁また来てるの?
さっさと2chから消えろ
0159デフォルトの名無しさん2015/07/31(金) 21:02:27.62ID:SPFFmEBo
無理だよ、毛は10年前からナンパ書き込みしたりしてるから
0160デフォルトの名無しさん2015/07/31(金) 22:59:33.38ID:Tuqyf3gY
いつどこに誰が来たのかさっぱりわからないし意味不明。
0161デフォルトの名無しさん2015/08/01(土) 01:31:31.22ID:CYsajC4S
ヤングアニマル No.15
アンダーメンバー全員集合 16ページ お祭り騒ぎ

ベルセルク連載開始 + 別冊付録 直近4話分


皆、短パン・ランニングシャツ姿
堀・らりんのお股
ひめたんの胸
0162デフォルトの名無しさん2015/08/01(土) 05:22:40.82ID:494SgxRt
そういや原発の長文書き込む荒らしがなりを潜めたと思ったら、入れ替わるように毛の壁ブームが起こったな
0163デフォルトの名無しさん2015/08/01(土) 10:47:10.94ID:jD/MwJWz
1人しか敵視しない1bit脳が基本だから
客観的に1人いようが2人いようが主観的には1人しか視えない
0164デフォルトの名無しさん2015/08/02(日) 20:21:12.98ID:htkPKsn5
モナドの合成って難しいことなの?
0165デフォルトの名無しさん2015/08/02(日) 20:36:45.90ID:SLv/zRdd
>>162
原発長文君は効率的な情報収集という意味では有用であった復活を拒絶しない
0166デフォルトの名無しさん2015/08/02(日) 20:39:24.29ID:Iy0keT5I
きーたぽすととかいうけのかべが抹消されたようだ
0167デフォルトの名無しさん2015/08/02(日) 21:10:57.21ID:jhqklPYl
cabal-installでドキュメントも一緒にインストールする際のhtmlのリンクの質問です。

パッケージをインストールするとドキュメントも一緒にインストールされるように設定しましたが、
ドキュメントのルートのindex.html(.cabal/config ファイルの dic-index-file の項)が更新されるとき、
インストールしたパッケージが公開しているモジュールへのリンクが間違った場所を指しています。

.cabal/config ファイルのインストールディレクトリ関係の項はデフォルトで下記のようになっています(一部だけ抜粋)。

doc-index-file: $datadir/doc/$arch-$os-$compiler/index.html

install-dirs user
 prefix: /home/ユーザー名/.cabal
 datadir: $prefix/share
 docdir: $datadir/doc/$abi/$pkgid
 htmldir: $dicdir/html
 haddockdir: $htmldir

例えば今 hacolour-1.23 パッケージをインストールすると、ドキュメントは
/home/ユーザー名/.cabal/share/doc/x86_64-linux-ghc-7.10.1/hscolour-1.23/html/
以下にインストールされます。

しかし、doc-index-file の index.html ページの例えば Language.Haskell.HsColour のリンクは
/home/ユーザー名/.cabal/share/doc/x86_64-linux-ghc-7.10.1/Language-Haskell-HsColour.html
を指すように更新されてしまいます。
当然、そんな所に Language-Haskell-HsColour.html ファイルはありません。

この間違ったリンクを正しく
/home/ユーザー名/.cabal/share/doc/x86_64-linux-ghc-7.10.1/hscolour-1.23/html/Language-Haskell-HsColour.html
を指すように設定するには
.cabal/config ファイルのどこを直せば良いのでしょうか。
0168デフォルトの名無しさん2015/08/02(日) 21:22:35.46ID:PjsL8G7T
>>167
>doc-index-file: $datadir/doc/$arch-$os-$compiler/index.html

普通に

doc-index-file: $datadir/doc/$arch-$os-$compiler/$pkgid/index.html

じゃいかんの?
0169デフォルトの名無しさん2015/08/02(日) 21:23:45.67ID:PjsL8G7T
あ、 ....../$pkgid/html/index.html かな。パスの途中に "html" 入れ忘れた。
0170デフォルトの名無しさん2015/08/02(日) 21:27:13.13ID:PjsL8G7T
ごめん見当違いだったわ。
総インデックスファイルは確かにそこになきゃダメだ。
0171デフォルトの名無しさん2015/08/02(日) 22:14:50.22ID:5gB+ySz/
>>164
モナドは自己関手なんで、関手を合成することができるが、
そうしてできた合成関手は一般にはモナドにならない。
0172デフォルトの名無しさん2015/08/02(日) 23:43:12.86ID:htkPKsn5
>>171
合成関手はモナドになり得ると思うが。。。
モナドの合成は一般にはモナドにならないということね?
なぜそうなのか、まだよく分かってないのだが、
そもそも合成できないっていうのはモナドが圏的でないということね?
それって結構困ったことなのでは?
0173デフォルトの名無しさん2015/08/03(月) 01:17:03.15ID:kH5++B+D
>> 167
見当違いかもしれないけど、俺の手元の~/.cabal/configは
htmldir: $docdir/html
になってた。貴方のは
htmldir: $dicdir/html
0174デフォルトの名無しさん2015/08/03(月) 07:24:39.84ID:UJ5SIf4H
>>173
すいません、ただの書き間違えです。
私の方でも正しくは

htmldir: $docdir/html

です。
0175デフォルトの名無しさん2015/08/03(月) 11:59:33.09ID:C3iL4RK8
>>172
モナドFとGについて、合成関手FGに対して適切なηとμを、
「一般には」構成できない。FとGがよほど相性が良い場合は別だけど。
0176デフォルトの名無しさん2015/08/03(月) 17:24:38.72ID:u3Kfbgnb
         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    < 排便ダン きんもちい〜
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\
      /⌒\〆',  `  ̄ ´  ゝ/⌒\
    /  ノつ\ ・    ・  /⊂  ヽ!
o0○ノ  /  3  \ (::::⌒ヽ / とノ\ ヽ○0o
(    /、_ノ\   Y `(_、_)   /  \´  )゚
 \_)    `ヽ   : :;;*:;   : : : |    (_ノ
         人__;;:;;、___ノ          ヽヽ        ヽヽ
             ;:;;:;;:;,,           ──┐ |  |   ──┐ |  |
          ∬ ;;:;::.;::.::;::..:;:..: ∬          /  |  |      /.  |  |
      ・〜   ;::;.:;:;:;:;:.:;:.:::.;:;:;.:.:.:          ノ    ノ  ┐ ノ    ノ  ┐
          ∬;;;:::;;;:;:.:;:.::.:;;.:.;.:;.:; ∬                 ┴    ヽヽ     ┴
              :"
0177デフォルトの名無しさん2015/08/04(火) 07:05:53.89ID:fTn2TRnu
もし敵の武器をコピーする能力があったら
意味不明すぎてコピーできない武器を使えばいい
0178デフォルトの名無しさん2015/08/04(火) 09:50:58.91ID:Jii/ZMO+
>>175
了解。
モナドが合成できないということは、代数的議論としてはそうだと言ってればいいんだろうが、
プログラミングとしては、致命的なのではないの?
0179デフォルトの名無しさん2015/08/04(火) 18:16:37.45ID:Qc8p5PG4
>>178
代数的な議論とか言ったって簡単に情報系の議論に移せるよ。

Fという文脈に、さらにGという文脈をつけたものは、先にG、それをFでかぶせたものとは
同一視できない。

もう少し具体的に言えば、Maybeと状態モナドStateを考えたとき、Maybe State s a と State s Maybe a
を何も制約つけずに同一視できるほうがプログラミングとしては致命的だよ。
0180デフォルトの名無しさん2015/08/04(火) 20:22:00.28ID:T0ZfeL7S
すいませんハスケル初級者で質問なのですが
ハスケルでは「=」は代入ではなく束縛だという事で

関数定義
func :: Int -> Int
func x = func (x - 1) 
それを使った式
func 100

と書いた場合無限に減算を繰り返す理由は
「=」は代入ではなく束縛だから
ハスケルがfunc xに該当する唯一の値を求めて処理を繰り返すという
仕組みになっているという理解でよろしいでしょうか。
0181デフォルトの名無しさん2015/08/04(火) 20:46:26.59ID:8q1xh6ui
代入とか束縛とか関係ない

int func(int x) {
. return func(x-1);
}

int x = func(100);

Cでこう書いたって無限再帰
0182デフォルトの名無しさん2015/08/04(火) 21:03:02.69ID:Jii/ZMO+
>>179
可換でないといけないとは言っていない。
合成ができないのが致命的と言ったのだが
0183デフォルトの名無しさん2015/08/05(水) 08:30:57.49ID:XaoKQAnn
素数と素数の積が素数でないのは致命的じゃないが
モナドとモナドの合成がモナドでないのは致命的か?
0184デフォルトの名無しさん2015/08/05(水) 08:31:02.84ID:8IuY4/EZ
>>180 それは
x = x - 1
とかの場合の話じゃない?
0185デフォルトの名無しさん2015/08/05(水) 09:20:55.44ID:PKbBdrRV
>>182
なぜ致命的なのかさっぱりわからない
0186デフォルトの名無しさん2015/08/05(水) 11:55:37.34ID:6JvEd9Ae
>>183 >>185
> 素数と素数の積が素数でないのは致命的じゃないが
それは素数の本質からの帰結だが、モナドの場合はそうではない。
もし整数と整数の積が整数にならないとすると、それは整数概念にとってかなり致命的。
群とまでいわなくても圏すらなさない概念はふつう使い物にならない
0187デフォルトの名無しさん2015/08/05(水) 12:21:47.56ID:/t+jhWZx
>>178
>モナドが合成できないということは、代数的議論としてはそうだと言ってればいいんだろうが、
>プログラミングとしては、致命的なのではないの?

そりゃモナドでプログラミングしたことなきゃわかんないよな
0188デフォルトの名無しさん2015/08/05(水) 13:35:33.66ID:WyZxE69I
>>186
よくわからんが仮に「モナド」が使い物にならないなら
「素関手」みたいな、素数に似た名前の新しい概念を提案すればいいんだろ?
0189デフォルトの名無しさん2015/08/05(水) 14:44:47.74ID:6JvEd9Ae
>>188
今は、素でないといけないと言ってるわけじゃないし(むしろ素しかないのは変だなと言ってる)
名前を問題にしてるわけでもないんだが
0190デフォルトの名無しさん2015/08/05(水) 15:47:37.18ID:WyZxE69I
ただ名前を提案するだけでも、何も提案しない奴よりマシになれるからね
コストは最小化した方が良いし
0191デフォルトの名無しさん2015/08/05(水) 19:06:59.33ID:nSk5CAms
ハスケルで実用的なプログラム組みたい
具体的にはエロ画像サイトのスクレイピングやりたい
0192デフォルトの名無しさん2015/08/05(水) 20:35:22.09ID:3EIw/aJp
>>191
やったらいいじゃん
01931802015/08/05(水) 20:35:53.33ID:++LOioZG
>>181 >>184
すいません代入束縛関係なく無限再帰の構文でした。

無限再帰途中で停止するため基底部を
パターンマイッチングの設定で止めてみました。

func' :: Int -> Int
func' 0 = 0
func' x = func' (x - 1)

x = x - 1でもやってみます。
0194デフォルトの名無しさん2015/08/05(水) 23:13:16.26ID:/t+jhWZx
x = x-1

はHaskellだと止まらないよ。

x = x-1 = (x-1)-1 = ((x-1)-1)-1) = ...

といつまでたっても書き換えが終わらないから。
ただこの例ではループの検出が容易なのでghciで

ghci> let x = x-1
ghci> x

を試すと *** Exception: <<loop>> となって中断される。
基底部のない再帰はそうならない。
0195デフォルトの名無しさん2015/08/06(木) 15:22:18.11ID:gwZmdoaP
>>187
ほんとこれ。 モナドの積がモナドにならないことがなぜ致命的なのか、全然言えないんだよねこの人。
0196デフォルトの名無しさん2015/08/06(木) 16:19:38.61ID:hE+0lNLB
あれこれ空論には饒舌でも結局コード書かない奴は何をやってもダメ
0197デフォルトの名無しさん2015/08/06(木) 20:09:37.57ID:QVat9e3X
でもまあ何をやってもダメな奴は
自分は何もやらず安く買って高く売るだけの能力に全振りしてるんじゃないか
01981802015/08/06(木) 20:35:31.96ID:9HWheWsA
>>194
ありがとうございます。
試してみて止まらないのを確認しました。
xが無限ループに束縛される様な感じです。
0199デフォルトの名無しさん2015/08/07(金) 09:35:35.60ID:qqVIQMo+
>>188
素関手ってのは、あらゆる関手がそれらから合成できるときに使う言葉だ。
モナドは全然そんなものじゃないだろ?

>>195 >>196 >>197
モナドっていうのは、ごく限られた単純局面でのみ使えるプログラミング技法だっていう自覚はないの?
その意味で、関手はもちろんメジャーだが、モナドはニッチなんだよ。
もっと実用の「コード書いて」いくとそれがわかってくると思うが
0200デフォルトの名無しさん2015/08/07(金) 10:39:25.62ID:aKStrfm+
>>199
御託はいいんだよ。モナドってのは自己関手が作り出す「文脈」を引き継いで
どんどん計算してく、そういう発想をカタチにしたものなわけ。そういう具体的な
思想と具体的な実装を持っていて、Wadlerが示したように do 記法を通じて
参照透明性を壊さずに命令型のプログラミングができることは示された。

んで君は、「モナドは合成できないじゃないか」と言ってるわけ。んなこたあ誰だって
知ってるんで、たとえばモナドをパラメトリックにして、モナドトランスフォーマなんかを
考えたらいいんじゃね?いや、それ一見いいように思えてモナドがタワー状に積み重なって
保守しづらいんだけどとかいろんな人がまだあれこれやってる最中。

なんか便利なものができたら、その「便利なもの」が切り開いた地平の先に新しい岩があるの。
それは「問題の解決がもたらした新しい問題」なので頭が痛いところだけど、そうやって新しい問題の
解決のために挑むのが「知性ある人間」のしごとなの。

「馬車は不便」を内燃機関による自動車が解決したけど、今度はその馬力と速度を人間が
制御しそこねて「走る棺桶」だと言われたり、自動車による死者が多すぎて「交通戦争」と
言われたりすることに対して、シートベルトが知性ある人間によって発明されたの。
シートベルトは中途半端な解決策だね、ということでエアバッグを発明したの。

なんかのアイデアが副次的にもたらす頭の痛い問題をとりあげる、それは大事。
でも、「こんな致命的な欠陥があるから問題外」という考えは知性の放棄なの。

「自動車事故で人がたくさん死ぬから自動車禁止な」←知性の放棄です。

経済的工学的制約があるから、自動車事故の問題だってまだ解決してない。でもそれを
解決しようと続けることが知性なの。

モナドの合成の話は頭が痛い問題で、まだ十分な解決策をだれも見いだせてない。でも
それで喚き散らして「欠陥品」と罵ってるのはバカでもできる。知性がある人間は君が喚き散らしてる
間も圏論の本を読みながら「いくらかマシなアイデア」をひねり出そうとしてるの。
0201デフォルトの名無しさん2015/08/07(金) 13:10:20.13ID:qqVIQMo+
>>200
力のこもったコメントありがとう
> 御託はいいんだよ。
もっと冷静にw
> 参照透明性を壊さずに命令型のプログラミングができることは示された。
それは関数型にとって宿命的課題。だが、モナドはそのためのものでもないし、モナドだから解決できるわけでもない
> んなこたあ誰だって知ってるんで
もっと冷静に。合成できないことは知っててもその意味が分かっていない
>「馬車は不便」を内燃機関による自動車が解決した
その場合の自動車は、限界はあっても、本質的技術進歩なんだよ。
その他あまたのそもそも成立しない技術とは区別しないとな。
合成できないというのは成立し得ない兆候なのよ。
> でも、「こんな致命的な欠陥があるから問題外」という考えは知性の放棄なの。
いやいや、致命的な欠陥があればそれはもうそれでだめなのよw
> モナドの合成の話は頭が痛い問題で、まだ十分な解決策をだれも見いだせてない。
それが分かっているなら、少し救いだが
> 君が喚き散らしてる間も圏論の本を読みながら「いくらかマシなアイデア」をひねり出そうとしてるの。
圏論の本を読みながらw
そもそもモナドが圏論から形式的にひねり出したアイデアだから、プログラミングでは使えないんじゃないのかい?
0202デフォルトの名無しさん2015/08/07(金) 20:18:30.98ID:/Xr5U2Jc
あれこれ空論には饒舌でも結局コード書かない奴は何をやってもダメ
0203デフォルトの名無しさん2015/08/07(金) 22:14:14.99ID:CgCkvu6a
合成するならモナドじゃなくて、モナドに供する関数でやってくれってことかねぇ。

モナドでパイ生地宜しく抽象レイヤ重ね出したら、結局手続き型と同じ業を背負い込むんじゃねーの?
という素朴な疑問がある。
0204デフォルトの名無しさん2015/08/08(土) 07:32:51.12ID:OWyBYzJT
手続き型言語がーってのは的外れだな
この流れなら普通は自然言語に疑問をもつ
自然言語なんて空論記述言語にすぎないんじゃねーかと
0205デフォルトの名無しさん2015/08/08(土) 09:16:43.49ID:SyZUU7PY
>>204
意味不明w
自然言語だからか?w
0206デフォルトの名無しさん2015/08/08(土) 10:03:20.67ID:OWyBYzJT
都合が悪いようだな
自然言語を理想とする理想主義が否定されれば高級言語や人工知能の大部分が崩れるから
0207デフォルトの名無しさん2015/08/08(土) 10:56:41.88ID:fC37rrhT
>>206
逆だよ。ラッセルのような論理主義は自然言語が曖昧性を持ち、真理を記述するのに不適格だと
考えて記号論理を推進した。そのラッセルが生み出した型理論を(大幅に)修正したものが
強い型を持つ言語の基盤になっている。

自然言語による真理記述に興味を持ち続けた学者もいるけど、少数派(間違いだといいたいわけじゃない)
で、今日のプログラミング言語には全く影響を与えていない。
0208デフォルトの名無しさん2015/08/08(土) 14:05:14.68ID:OWyBYzJT
低級言語に曖昧性はない
高級言語は曖昧性がないことに加えて更に別の理想を追求している
おそらく一度あきらめた理想を取り戻そうとしている
0209デフォルトの名無しさん2015/08/08(土) 15:28:39.84ID:TgCfkrij
毛の壁みたいなこと言ってないでコード書けよ
0210デフォルトの名無しさん2015/08/08(土) 15:52:47.27ID:mk1m6mga
Haskellでまともなコードが書ける日本人なんていないでしょ
0211デフォルトの名無しさん2015/08/08(土) 16:16:44.90ID:TgCfkrij
あっそう(ハナホジー
0212デフォルトの名無しさん2015/08/08(土) 17:24:31.84ID:CVdJzgpn
都合のいいサンプルを出してるだけだ
0213デフォルトの名無しさん2015/08/08(土) 17:25:05.09ID:CVdJzgpn
>>200みたいな評論のことね
0214デフォルトの名無しさん2015/08/08(土) 17:31:44.38ID:9n35IarN
ガラパゴスなおまえらには無理
0215デフォルトの名無しさん2015/08/08(土) 18:46:17.01ID:i6VMh23W
haskell なんて簡単だよ
ひたすら型を複雑にすれば勝手に精密なプログラムになってくれるんだぜ?
あんな楽な言語、他に無いよ
0216デフォルトの名無しさん2015/08/09(日) 09:57:54.75ID:Goie4Pfe
仕事でも趣味でも普通に世界でバリバリHaskell書いてる日本人たくさんいるけどな
0217デフォルトの名無しさん2015/08/09(日) 10:15:53.22ID:z+nEtG9u
理想の言語を選べ
1 自然言語 ←コード書かない
2 型を書くだけ ←コード書かない
3 短い (一行とか) ←コード書く
0218デフォルトの名無しさん2015/08/09(日) 10:19:57.32ID:yc5ubK7v
>>216
日本人が普通に世界でバリバリHaskellで書いたアプリケーションをたくさん紹介してくれ
0219デフォルトの名無しさん2015/08/09(日) 11:07:30.63ID:uWrNjf8R
>>217
この3つの中では
1しかないかな?
2と3は論理的にありえない
0220デフォルトの名無しさん2015/08/09(日) 12:47:58.32ID:fLWMExWl
>>218 外資金融系とか。
0221デフォルトの名無しさん2015/08/09(日) 15:46:05.53ID:IcT2pazV
>>220
金融屋だけどHaskellは実務ではあんまり使わないよ
金融業界で使われている有名なライブラリがOcamlで書かれてるから、Ocamlが多い
あとは、F#だっけ?なんか、Ocaml互換のプログラミング言語
0222デフォルトの名無しさん2015/08/09(日) 16:06:00.55ID:q2cZe2Ik
>>221 知らないんだったら黙っててね
0223デフォルトの名無しさん2015/08/09(日) 16:07:28.11ID:t8Adpj37
言語名間違えてる時点で完全にモグリ。
0224デフォルトの名無しさん2015/08/09(日) 17:14:22.35ID:IcT2pazV
>>222
普通に現職の俺より詳しいというなら、なにかそれらしい反論してみろって

>>223
OCamlだったか、すまん
特定のドメイン領域でしか使わないし、俺は普段使わないから間違えたの
0225デフォルトの名無しさん2015/08/09(日) 17:56:53.34ID:jZAMYmB+
エアコーダーさんは黙ってね
0226デフォルトの名無しさん2015/08/09(日) 20:15:02.83ID:yc5ubK7v
どうせ紹介してくれるのならオープンソースの方がいいな。
まともに動く Haskell アプリのソース全体が見れる機会ってなかなかないんだ。
日本人が書いたなんて意地悪なことはもう言わんから、紹介してくれないか。

github 漁っても、実験的なものやサンプル、ライブラリくらいしか見あたらん。
なんか小粒な Web アプリはやたら出てくるが、なんだろ。
流行ってるのか?
0227デフォルトの名無しさん2015/08/09(日) 21:01:04.74ID:0a1Qk31r
Hskellは金融で使われているよ
まぁ下請けだったけどね
元受の会社は誰でも知ってる大会社
ヒントだけ書くと、ソー○ネク○ト
0228デフォルトの名無しさん2015/08/09(日) 21:19:45.38ID:0nk6UHsv
金融ってMATLABで数値計算ガリガリというイメージだがな。
0229デフォルトの名無しさん2015/08/09(日) 21:22:35.31ID:bxjvjJcB
cabal replのCtrl-Pがshellと違って連続で同じコマンド使ってても1つ前のコマンド出すから
間違える→Ctrl-Pの連打数が増える→間違えるの繰り返し辛い
0230デフォルトの名無しさん2015/08/09(日) 22:57:12.53ID:PuCXERZp
>>228
数値計算につかうわけじゃない
ADTで金融商品の記述のDSL作って使う
0231デフォルトの名無しさん2015/08/10(月) 08:18:32.34ID:5dby/keT
おまえらは「机上の空論」の世界でしか生きられない、ガラパゴスエアコーダー。言語の一つも作ってみろ、卑怯者
0232デフォルトの名無しさん2015/08/10(月) 10:22:50.55ID:6CToalvR
この場がいいのかどうか分かりませんが、もし分かれば教えてください。

Wadlerの"Theorems for free"に、
r: ∀X. List(X) -> List(X) ならば a* o r-A = r-B o a*
  ここで、a: A -> B, a*: List(A) -> List(B),
 r-A: List(A) -> List(A), r-B: List(B) -> List(B)
という定理が出てきます。

しかし、ここのrやaをたとえば
 r = { ["a", "b"] |-> ["a", "b", "b"],
[1, 2] |-> [2, 1],
........... }
a = { "a" |-> 1, "
"b" |-> 2,
............}
のようにとった場合、
 a* (r-Char(["a", "b"]) = a* (["a", "b", "b"])
= [1, 2, 2]
r-Int (a* (["a", "b"]) = r-Int ([1, 2])
= [2, 1]
となってしまい、明らかに
この定理は成り立たないと思うのですが、どこか誤解があるでしょうか?
0233デフォルトの名無しさん2015/08/10(月) 10:23:33.03ID:h0Losqum
ヘア告訴しか出来ない卑怯者がブンブンうるさいね
0234デフォルトの名無しさん2015/08/10(月) 10:32:54.55ID:mZ18nlaN
>>232 rの型が違う
0235デフォルトの名無しさん2015/08/10(月) 10:45:40.66ID:6CToalvR
>>234
> rの型が違う
どう違うのでしょうか? 気が付きません
0236デフォルトの名無しさん2015/08/10(月) 11:02:23.74ID:dDBl8Ksv
>>235 HaskellかMLのプログラム書いたことある?
0237デフォルトの名無しさん2015/08/10(月) 11:20:23.87ID:6CToalvR
どこが違うかを直接指摘してくれるとありがたいです
0238デフォルトの名無しさん2015/08/10(月) 13:39:27.85ID:Mr6uGRV9
232の謎の言語のコンパイラはどこにあるんだろう
もしかしてコンパイラがなくても型が見える人なのかな

Haskellも自分が使うためじゃなくて型が見えない人のために作っただけ
そう考えるとHaskellでアプリを作っている気配がないのも辻褄が合う
0239デフォルトの名無しさん2015/08/10(月) 14:07:42.71ID:3agS2rXW
>>232
Wadlerの論文のどこの話をしてるの?
0240デフォルトの名無しさん2015/08/10(月) 14:33:14.35ID:qNcURq9A
岡部健さんこんにちは
0241デフォルトの名無しさん2015/08/10(月) 14:40:16.50ID:08na6m/L
>>239
http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf の
Introductionの話だと思う

>>232が何を言いたいのかは分からないけど
0242デフォルトの名無しさん2015/08/10(月) 15:19:32.65ID:3agS2rXW
>>241
ありがとう。そんな最初のところだったのか。
こりゃ単に r はパラメトリック多相な関数じゃなきゃいかんて話だな。

>>232みたいに型ごと値ごとにアド・ホックな対応を付けて
r を構成することはできない(任意の型のリストの任意の値を
取らなきゃいけないんで計算可能にならない)。
0243デフォルトの名無しさん2015/08/10(月) 15:23:45.69ID:6CToalvR
>>239 >>241
そこです。
そこにある例では、odds関数の説明がよく分かりません。
「これは(定理の)反例にはならない。なぜなら、oddsの型が∀X. List(X) -> List(X)
ではなく、より特定的な List(Int) -> List(Int)であるので」と言うのですが、
oddsの型が∀X. List(X) -> List(X) になっていないとなぜ言えるのでしょうか?
φ(A)であってさらに∀X.φ(X) でもあることはあり得ることではないのですか?
0244デフォルトの名無しさん2015/08/10(月) 15:29:36.39ID:3agS2rXW
>>241

"odds"はIntについてしか定義できないだろ。
他の型についてどうやって定義すんだ?

というわけで、どんな型のリストにも適用できる関数は
特定の型の値を具体的に見て処理できないので
リストの構造を弄ることしかできない、ということよ
0245デフォルトの名無しさん2015/08/10(月) 15:29:57.17ID:3agS2rXW
あ、アンカー間違えた。>>241じゃなくて>>243
0246デフォルトの名無しさん2015/08/10(月) 15:31:01.54ID:6CToalvR
>>242
> 型ごと値ごとにアド・ホックな対応を付けて
> r を構成することはできない(任意の型のリストの任意の値を
> 取らなきゃいけないんで計算可能にならない)。
その条件が明記されているのはあまり見たことがないのですが、
暗黙の常識なのですか?
0247デフォルトの名無しさん2015/08/10(月) 15:32:35.38ID:3agS2rXW
>>246
この文脈での「関数」が計算可能関数じゃなきゃいけないのは常識。
0248デフォルトの名無しさん2015/08/10(月) 15:39:35.42ID:6CToalvR
>>244 >>247
すれ違いすみません。
> "odds"はIntについてしか定義できないだろ。
> 他の型についてどうやって定義すんだ?
Int以外についてはidにする、とかすればいいのではないですか?
そうしたときには
> この文脈での「関数」が計算可能関数じゃなきゃいけないのは常識。
計算可能でもあると思うのですが?
それに「この文脈」というのは今のような場面では少しいい加減な感じがしますが
0249デフォルトの名無しさん2015/08/10(月) 15:42:48.51ID:3agS2rXW
まあ、こりゃアド・ホック多相の話をしてない、ってだけだな。
0250デフォルトの名無しさん2015/08/10(月) 15:46:02.23ID:6CToalvR
>>249
「アド・ホック多相」という概念があって、
ここでは「ただしアド・ホック多相でないこと」という条件が暗黙に付いている
ということですか?
0251デフォルトの名無しさん2015/08/10(月) 16:08:40.11ID:C7dCXIlE
原文読んでみたけども、最初からパラメトリック多相の文脈で話してるし
問題の部分のちょっと前で暗黙どころか明確に否定している気が…

> The intuitive expIanation of this result is that r must work on lists of X
> for any type X. Since r is provided with no operations on values of type X,
> all it can do is rearrange such lists, independent of the values containedin them.
> Thus applying a to each element of a list and then rearranging yields
> the same result as rearranging and then applying a to each element.
0252デフォルトの名無しさん2015/08/10(月) 18:26:41.48ID:6CToalvR
>>251
> 問題の部分のちょっと前で暗黙どころか明確に否定している気が…

特に以下の部分のことでしょうか?
>> Since r is provided with no operations on values of type X,
>> all it can do is rearrange such lists, independent of the values containedin them.

そういう意図なのだろうと思うのですが、
「r: ∀X. List(X) -> List(X)」だけではその意図を正確に形式化できていないのではないか?
と疑問なのですが。。。
■ このスレッドは過去ログ倉庫に格納されています