関数型プログラミング言語Haskell Part29 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001岡部メモリリーク健
2015/07/14(火) 19:27:09.01ID:jJ1YDtNe,.-―: ̄`ー::::::::::、
/::::::::::::.::::::::::::::::::::::::::::`::、、
/::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
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日本語でOK
0154デフォルトの名無しさん
2015/07/28(火) 22:15:38.33ID:uKnSRdVu0155デフォルトの名無しさん
2015/07/28(火) 22:49:30.17ID:MQ4Zq0Y10156デフォルトの名無しさん
2015/07/28(火) 23:02:16.25ID:2DleteTo0157デフォルトの名無しさん
2015/07/30(木) 13:15:34.02ID:XKVzkpKt0158デフォルトの名無しさん
2015/07/31(金) 14:52:35.97ID:gTceL3gJさっさと2chから消えろ
0159デフォルトの名無しさん
2015/07/31(金) 21:02:27.62ID:SPFFmEBo0160デフォルトの名無しさん
2015/07/31(金) 22:59:33.38ID:Tuqyf3gY0161デフォルトの名無しさん
2015/08/01(土) 01:31:31.22ID:CYsajC4Sアンダーメンバー全員集合 16ページ お祭り騒ぎ
ベルセルク連載開始 + 別冊付録 直近4話分
皆、短パン・ランニングシャツ姿
堀・らりんのお股
ひめたんの胸
0162デフォルトの名無しさん
2015/08/01(土) 05:22:40.82ID:494SgxRt0163デフォルトの名無しさん
2015/08/01(土) 10:47:10.94ID:jD/MwJWz客観的に1人いようが2人いようが主観的には1人しか視えない
0164デフォルトの名無しさん
2015/08/02(日) 20:21:12.98ID:htkPKsn50165デフォルトの名無しさん
2015/08/02(日) 20:36:45.90ID:SLv/zRdd原発長文君は効率的な情報収集という意味では有用であった復活を拒絶しない
0166デフォルトの名無しさん
2015/08/02(日) 20:39:24.29ID:Iy0keT5I0167デフォルトの名無しさん
2015/08/02(日) 21:10:57.21ID:jhqklPYlパッケージをインストールするとドキュメントも一緒にインストールされるように設定しましたが、
ドキュメントのルートの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>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:PjsL8G7T0170デフォルトの名無しさん
2015/08/02(日) 21:27:13.13ID:PjsL8G7T総インデックスファイルは確かにそこになきゃダメだ。
0171デフォルトの名無しさん
2015/08/02(日) 22:14:50.22ID:5gB+ySz/モナドは自己関手なんで、関手を合成することができるが、
そうしてできた合成関手は一般にはモナドにならない。
0172デフォルトの名無しさん
2015/08/02(日) 23:43:12.86ID:htkPKsn5合成関手はモナドになり得ると思うが。。。
モナドの合成は一般にはモナドにならないということね?
なぜそうなのか、まだよく分かってないのだが、
そもそも合成できないっていうのはモナドが圏的でないということね?
それって結構困ったことなのでは?
0173デフォルトの名無しさん
2015/08/03(月) 01:17:03.15ID:kH5++B+D見当違いかもしれないけど、俺の手元の~/.cabal/configは
htmldir: $docdir/html
になってた。貴方のは
htmldir: $dicdir/html
0174デフォルトの名無しさん
2015/08/03(月) 07:24:39.84ID:UJ5SIf4Hすいません、ただの書き間違えです。
私の方でも正しくは
htmldir: $docdir/html
です。
0175デフォルトの名無しさん
2015/08/03(月) 11:59:33.09ID:C3iL4RK8モナド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+了解。
モナドが合成できないということは、代数的議論としてはそうだと言ってればいいんだろうが、
プログラミングとしては、致命的なのではないの?
0179デフォルトの名無しさん
2015/08/04(火) 18:16:37.45ID:Qc8p5PG4代数的な議論とか言ったって簡単に情報系の議論に移せるよ。
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:8q1xh6uiint func(int x) {
. return func(x-1);
}
int x = func(100);
Cでこう書いたって無限再帰
0182デフォルトの名無しさん
2015/08/04(火) 21:03:02.69ID:Jii/ZMO+可換でないといけないとは言っていない。
合成ができないのが致命的と言ったのだが
0183デフォルトの名無しさん
2015/08/05(水) 08:30:57.49ID:XaoKQAnnモナドとモナドの合成がモナドでないのは致命的か?
0184デフォルトの名無しさん
2015/08/05(水) 08:31:02.84ID:8IuY4/EZx = x - 1
とかの場合の話じゃない?
0185デフォルトの名無しさん
2015/08/05(水) 09:20:55.44ID:PKbBdrRVなぜ致命的なのかさっぱりわからない
0186デフォルトの名無しさん
2015/08/05(水) 11:55:37.34ID:6JvEd9Ae> 素数と素数の積が素数でないのは致命的じゃないが
それは素数の本質からの帰結だが、モナドの場合はそうではない。
もし整数と整数の積が整数にならないとすると、それは整数概念にとってかなり致命的。
群とまでいわなくても圏すらなさない概念はふつう使い物にならない
0187デフォルトの名無しさん
2015/08/05(水) 12:21:47.56ID:/t+jhWZx>モナドが合成できないということは、代数的議論としてはそうだと言ってればいいんだろうが、
>プログラミングとしては、致命的なのではないの?
そりゃモナドでプログラミングしたことなきゃわかんないよな
0188デフォルトの名無しさん
2015/08/05(水) 13:35:33.66ID:WyZxE69Iよくわからんが仮に「モナド」が使い物にならないなら
「素関手」みたいな、素数に似た名前の新しい概念を提案すればいいんだろ?
0189デフォルトの名無しさん
2015/08/05(水) 14:44:47.74ID:6JvEd9Ae今は、素でないといけないと言ってるわけじゃないし(むしろ素しかないのは変だなと言ってる)
名前を問題にしてるわけでもないんだが
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やったらいいじゃん
0193180
2015/08/05(水) 20:35:53.33ID:++LOioZGすいません代入束縛関係なく無限再帰の構文でした。
無限再帰途中で停止するため基底部を
パターンマイッチングの設定で止めてみました。
func' :: Int -> Int
func' 0 = 0
func' x = func' (x - 1)
x = x - 1でもやってみます。
0194デフォルトの名無しさん
2015/08/05(水) 23:13:16.26ID:/t+jhWZxは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ほんとこれ。 モナドの積がモナドにならないことがなぜ致命的なのか、全然言えないんだよねこの人。
0196デフォルトの名無しさん
2015/08/06(木) 16:19:38.61ID:hE+0lNLB0197デフォルトの名無しさん
2015/08/06(木) 20:09:37.57ID:QVat9e3X自分は何もやらず安く買って高く売るだけの能力に全振りしてるんじゃないか
0198180
2015/08/06(木) 20:35:31.96ID:9HWheWsAありがとうございます。
試してみて止まらないのを確認しました。
xが無限ループに束縛される様な感じです。
0199デフォルトの名無しさん
2015/08/07(金) 09:35:35.60ID:qqVIQMo+素関手ってのは、あらゆる関手がそれらから合成できるときに使う言葉だ。
モナドは全然そんなものじゃないだろ?
>>195 >>196 >>197
モナドっていうのは、ごく限られた単純局面でのみ使えるプログラミング技法だっていう自覚はないの?
その意味で、関手はもちろんメジャーだが、モナドはニッチなんだよ。
もっと実用の「コード書いて」いくとそれがわかってくると思うが
0200デフォルトの名無しさん
2015/08/07(金) 10:39:25.62ID:aKStrfm+御託はいいんだよ。モナドってのは自己関手が作り出す「文脈」を引き継いで
どんどん計算してく、そういう発想をカタチにしたものなわけ。そういう具体的な
思想と具体的な実装を持っていて、Wadlerが示したように do 記法を通じて
参照透明性を壊さずに命令型のプログラミングができることは示された。
んで君は、「モナドは合成できないじゃないか」と言ってるわけ。んなこたあ誰だって
知ってるんで、たとえばモナドをパラメトリックにして、モナドトランスフォーマなんかを
考えたらいいんじゃね?いや、それ一見いいように思えてモナドがタワー状に積み重なって
保守しづらいんだけどとかいろんな人がまだあれこれやってる最中。
なんか便利なものができたら、その「便利なもの」が切り開いた地平の先に新しい岩があるの。
それは「問題の解決がもたらした新しい問題」なので頭が痛いところだけど、そうやって新しい問題の
解決のために挑むのが「知性ある人間」のしごとなの。
「馬車は不便」を内燃機関による自動車が解決したけど、今度はその馬力と速度を人間が
制御しそこねて「走る棺桶」だと言われたり、自動車による死者が多すぎて「交通戦争」と
言われたりすることに対して、シートベルトが知性ある人間によって発明されたの。
シートベルトは中途半端な解決策だね、ということでエアバッグを発明したの。
なんかのアイデアが副次的にもたらす頭の痛い問題をとりあげる、それは大事。
でも、「こんな致命的な欠陥があるから問題外」という考えは知性の放棄なの。
「自動車事故で人がたくさん死ぬから自動車禁止な」←知性の放棄です。
経済的工学的制約があるから、自動車事故の問題だってまだ解決してない。でもそれを
解決しようと続けることが知性なの。
モナドの合成の話は頭が痛い問題で、まだ十分な解決策をだれも見いだせてない。でも
それで喚き散らして「欠陥品」と罵ってるのはバカでもできる。知性がある人間は君が喚き散らしてる
間も圏論の本を読みながら「いくらかマシなアイデア」をひねり出そうとしてるの。
0201デフォルトの名無しさん
2015/08/07(金) 13:10:20.13ID:qqVIQMo+力のこもったコメントありがとう
> 御託はいいんだよ。
もっと冷静にw
> 参照透明性を壊さずに命令型のプログラミングができることは示された。
それは関数型にとって宿命的課題。だが、モナドはそのためのものでもないし、モナドだから解決できるわけでもない
> んなこたあ誰だって知ってるんで
もっと冷静に。合成できないことは知っててもその意味が分かっていない
>「馬車は不便」を内燃機関による自動車が解決した
その場合の自動車は、限界はあっても、本質的技術進歩なんだよ。
その他あまたのそもそも成立しない技術とは区別しないとな。
合成できないというのは成立し得ない兆候なのよ。
> でも、「こんな致命的な欠陥があるから問題外」という考えは知性の放棄なの。
いやいや、致命的な欠陥があればそれはもうそれでだめなのよw
> モナドの合成の話は頭が痛い問題で、まだ十分な解決策をだれも見いだせてない。
それが分かっているなら、少し救いだが
> 君が喚き散らしてる間も圏論の本を読みながら「いくらかマシなアイデア」をひねり出そうとしてるの。
圏論の本を読みながらw
そもそもモナドが圏論から形式的にひねり出したアイデアだから、プログラミングでは使えないんじゃないのかい?
0202デフォルトの名無しさん
2015/08/07(金) 20:18:30.98ID:/Xr5U2Jc0203デフォルトの名無しさん
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意味不明w
自然言語だからか?w
0206デフォルトの名無しさん
2015/08/08(土) 10:03:20.67ID:OWyBYzJT自然言語を理想とする理想主義が否定されれば高級言語や人工知能の大部分が崩れるから
0207デフォルトの名無しさん
2015/08/08(土) 10:56:41.88ID:fC37rrhT逆だよ。ラッセルのような論理主義は自然言語が曖昧性を持ち、真理を記述するのに不適格だと
考えて記号論理を推進した。そのラッセルが生み出した型理論を(大幅に)修正したものが
強い型を持つ言語の基盤になっている。
自然言語による真理記述に興味を持ち続けた学者もいるけど、少数派(間違いだといいたいわけじゃない)
で、今日のプログラミング言語には全く影響を与えていない。
0208デフォルトの名無しさん
2015/08/08(土) 14:05:14.68ID:OWyBYzJT高級言語は曖昧性がないことに加えて更に別の理想を追求している
おそらく一度あきらめた理想を取り戻そうとしている
0209デフォルトの名無しさん
2015/08/08(土) 15:28:39.84ID:TgCfkrij0210デフォルトの名無しさん
2015/08/08(土) 15:52:47.27ID:mk1m6mga0211デフォルトの名無しさん
2015/08/08(土) 16:16:44.90ID:TgCfkrij0212デフォルトの名無しさん
2015/08/08(土) 17:24:31.84ID:CVdJzgpn0213デフォルトの名無しさん
2015/08/08(土) 17:25:05.09ID:CVdJzgpn0214デフォルトの名無しさん
2015/08/08(土) 17:31:44.38ID:9n35IarN0215デフォルトの名無しさん
2015/08/08(土) 18:46:17.01ID:i6VMh23Wひたすら型を複雑にすれば勝手に精密なプログラムになってくれるんだぜ?
あんな楽な言語、他に無いよ
0216デフォルトの名無しさん
2015/08/09(日) 09:57:54.75ID:Goie4Pfe0217デフォルトの名無しさん
2015/08/09(日) 10:15:53.22ID:z+nEtG9u1 自然言語 ←コード書かない
2 型を書くだけ ←コード書かない
3 短い (一行とか) ←コード書く
0218デフォルトの名無しさん
2015/08/09(日) 10:19:57.32ID:yc5ubK7v日本人が普通に世界でバリバリHaskellで書いたアプリケーションをたくさん紹介してくれ
0219デフォルトの名無しさん
2015/08/09(日) 11:07:30.63ID:uWrNjf8Rこの3つの中では
1しかないかな?
2と3は論理的にありえない
0220デフォルトの名無しさん
2015/08/09(日) 12:47:58.32ID:fLWMExWl0221デフォルトの名無しさん
2015/08/09(日) 15:46:05.53ID:IcT2pazV金融屋だけどHaskellは実務ではあんまり使わないよ
金融業界で使われている有名なライブラリがOcamlで書かれてるから、Ocamlが多い
あとは、F#だっけ?なんか、Ocaml互換のプログラミング言語
0222デフォルトの名無しさん
2015/08/09(日) 16:06:00.55ID:q2cZe2Ik0223デフォルトの名無しさん
2015/08/09(日) 16:07:28.11ID:t8Adpj370224デフォルトの名無しさん
2015/08/09(日) 17:14:22.35ID:IcT2pazV普通に現職の俺より詳しいというなら、なにかそれらしい反論してみろって
>>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まぁ下請けだったけどね
元受の会社は誰でも知ってる大会社
ヒントだけ書くと、ソー○ネク○ト
0228デフォルトの名無しさん
2015/08/09(日) 21:19:45.38ID:0nk6UHsv0229デフォルトの名無しさん
2015/08/09(日) 21:22:35.31ID:bxjvjJcB間違える→Ctrl-Pの連打数が増える→間違えるの繰り返し辛い
0230デフォルトの名無しさん
2015/08/09(日) 22:57:12.53ID:PuCXERZp数値計算につかうわけじゃない
ADTで金融商品の記述のDSL作って使う
0231デフォルトの名無しさん
2015/08/10(月) 08:18:32.34ID:5dby/keT0232デフォルトの名無しさん
2015/08/10(月) 10:22:50.55ID:6CToalvRWadlerの"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:h0Losqum0234デフォルトの名無しさん
2015/08/10(月) 10:32:54.55ID:mZ18nlaN0235デフォルトの名無しさん
2015/08/10(月) 10:45:40.66ID:6CToalvR> rの型が違う
どう違うのでしょうか? 気が付きません
0236デフォルトの名無しさん
2015/08/10(月) 11:02:23.74ID:dDBl8Ksv0237デフォルトの名無しさん
2015/08/10(月) 11:20:23.87ID:6CToalvR0238デフォルトの名無しさん
2015/08/10(月) 13:39:27.85ID:Mr6uGRV9もしかしてコンパイラがなくても型が見える人なのかな
Haskellも自分が使うためじゃなくて型が見えない人のために作っただけ
そう考えるとHaskellでアプリを作っている気配がないのも辻褄が合う
0239デフォルトの名無しさん
2015/08/10(月) 14:07:42.71ID:3agS2rXWWadlerの論文のどこの話をしてるの?
0240デフォルトの名無しさん
2015/08/10(月) 14:33:14.35ID:qNcURq9A0241デフォルトの名無しさん
2015/08/10(月) 14:40:16.50ID:08na6m/Lhttp://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf の
Introductionの話だと思う
>>232が何を言いたいのかは分からないけど
0242デフォルトの名無しさん
2015/08/10(月) 15:19:32.65ID:3agS2rXWありがとう。そんな最初のところだったのか。
こりゃ単に r はパラメトリック多相な関数じゃなきゃいかんて話だな。
>>232みたいに型ごと値ごとにアド・ホックな対応を付けて
r を構成することはできない(任意の型のリストの任意の値を
取らなきゃいけないんで計算可能にならない)。
0243デフォルトの名無しさん
2015/08/10(月) 15:23:45.69ID:6CToalvRそこです。
そこにある例では、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"odds"はIntについてしか定義できないだろ。
他の型についてどうやって定義すんだ?
というわけで、どんな型のリストにも適用できる関数は
特定の型の値を具体的に見て処理できないので
リストの構造を弄ることしかできない、ということよ
0245デフォルトの名無しさん
2015/08/10(月) 15:29:57.17ID:3agS2rXW0246デフォルトの名無しさん
2015/08/10(月) 15:31:01.54ID:6CToalvR> 型ごと値ごとにアド・ホックな対応を付けて
> r を構成することはできない(任意の型のリストの任意の値を
> 取らなきゃいけないんで計算可能にならない)。
その条件が明記されているのはあまり見たことがないのですが、
暗黙の常識なのですか?
0247デフォルトの名無しさん
2015/08/10(月) 15:32:35.38ID:3agS2rXWこの文脈での「関数」が計算可能関数じゃなきゃいけないのは常識。
0248デフォルトの名無しさん
2015/08/10(月) 15:39:35.42ID:6CToalvRすれ違いすみません。
> "odds"はIntについてしか定義できないだろ。
> 他の型についてどうやって定義すんだ?
Int以外についてはidにする、とかすればいいのではないですか?
そうしたときには
> この文脈での「関数」が計算可能関数じゃなきゃいけないのは常識。
計算可能でもあると思うのですが?
それに「この文脈」というのは今のような場面では少しいい加減な感じがしますが
0249デフォルトの名無しさん
2015/08/10(月) 15:42:48.51ID:3agS2rXW0250デフォルトの名無しさん
2015/08/10(月) 15:46:02.23ID:6CToalvR「アド・ホック多相」という概念があって、
ここでは「ただしアド・ホック多相でないこと」という条件が暗黙に付いている
ということですか?
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> 問題の部分のちょっと前で暗黙どころか明確に否定している気が…
特に以下の部分のことでしょうか?
>> 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)」だけではその意図を正確に形式化できていないのではないか?
と疑問なのですが。。。
■ このスレッドは過去ログ倉庫に格納されています