アカウント名:
パスワード:
これを機にHaskellに触れてみようと思う。
# 関数型言語はLispとPythonしか触れなかった
Haskell は面白い言語ですよ。私は、C++ や Java がメインな人だったのですが、Haskell の学習は、いろいろカルチャーショックを味わえてエキサイティングな体験でした。木構造のアルゴリズムから攻めると分かりやすいと思います。でも、未だにモナドはよく分からないんですけどね…orz
モナドの分かりにくさは、うまい例がないところにある気がする実際のところ、処理がつながっているものはみんなモナドなのだが
うまい例がないどころか、モナドの例はあらゆるプログラミングのなかに溢れかえっているだってリストはモナドなんだよ。こんな単純で身近な例があるのに「うまい例がない」という人は、モナドを理解していないとしか思えない
他人に説明するための例えなんだから、「リストはモナド」で伝わらないなら、たとえあなたにとって自明でも例えとしては意味がないのでは?
基数と順序数と実数が「ぜんぶ数」だと言ってもうまい喩えがないようなものですな
ちなみに「リスト」はモナドではない
俺が「リストはモナド」と言っているのはこのことを指しているんだけど
http://www.sampou.org/haskell/a-a-monads/html/listmonad.html [sampou.org]
君が「リストはモナドではない」というのは何の事を言っているの?
それは「HaskellのListモナド」HaskellではListを用いて非決定性をもつ計算の連鎖を実現しているとうこと
一般的にリストはモナドではないし(そもそも意味をなさない)、モナドの理解のためにHaskell特有の事情を例に挙げるのも相応しくない
一般的にリストはモナドではないし(そもそも意味をなさない)
ある特定の言語でリストモナドの実装が標準ライブラリに存在しないことを指して「一般にはモナドはリストではない」と君が言いたいなら、君の中ではそうなんだろうけど、それこそ、特定の言語、特定の実装を指さずに「一般のリスト」「一般のモナド」「一般の言語」についていう場合は、「一般には」リストはモナドだというのは正しい。
モナドの理解のためにHaskell特有の事情を例に挙げるのも相応しくない
いや、これHaskell特有でも何でもないけど。例えばScalaの例。
http://eed3si9n.com/learning-scalaz/ja/List-Monad.html [eed3si9n.com]
標準ライブラリにモナドのフレームワークがある言語は稀だ
やはり、悪い例から始まるといつまでたっても理解ができないようです「リストのモナド」ってさあ、自分で言ってて意味が通らないと思わないの?なんでモナドの性質を書くべきところに「リスト」なんて実装がくるわけ?
HaskellでList(これは、Haskellの型のListのことです)がモナドなのはモナド則を満たすようにしているからで、それ以外の理由はないListを直接Monadのインスタンスにせず、ListをnewtypeしてそっちをMonadのインスタンスにすることは可能だし、その場合Listはモナドではなくなる(もちろん独自にモナドにする場合は別)
> モナドというのは抽象的なフレームワークであって、
およそモナド則を満たすものがモナドであって、それ以外の一般論はないし、フレームワークでもない
なんでモナドの性質を書くべきところに「リスト」なんて実装がくるわけ?
モナドを説明するときには、まず性質を説明すべきで、その後で具体例を説明すべき。それは元コメもわかっていて、だからモナドを理解するためには「良い例が欲しい」しかし「良い例がない」と言っているわけだ。
話を戻すが、ここでの論点は「リストのモナドのインスタンスを実装して、モナドを説明するのは説明として適切かどうか」。俺は「関数型を知らない人でもデータ構造としてのリストはよく知っているし、モナドのインスタンスを実装して見せるのも簡単だから、説明に適している。リストを実装して見せるのは「良い例」だ」といっている。それなのに「リストモナドが標準ライブラリにない言語もある。リストのモナドインスタンスには他の実装もある。だから「一般には」リストはモナドではない」というズレた指摘をし始めたから、話がズレてるんだけど。
およそモナド則を満たすものがモナドであって、それ以外の一般
さらに言えば、あなたの言ってる「「一般的に」リストはモナドではない」というのも、俺は意味を理解している。Javaの標準ライブラリにはListクラスがあるが、標準ライブラリにはそのListのモナドのインスタンスはない。だから、一般に「あるソフトウェアでソースコードにリストが定義されていれば、そのモナドインスタンスもソースコードに定義されている」は正しくないし、その意味で「「一般的に」リストはモナドではない」というのも意味は通る。
ただし、我々の論点は「リストのモナドを実装して見せることは、説明に適しているか」であって、俺の言っている「リストはモ
#2808317 [srad.jp] は三行でまとめようとして失敗した、まで読んだ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
日々是ハック也 -- あるハードコアバイナリアン
割とオフトピックだが (スコア:0)
これを機にHaskellに触れてみようと思う。
# 関数型言語はLispとPythonしか触れなかった
Re: (スコア:0)
Haskell は面白い言語ですよ。
私は、C++ や Java がメインな人だったのですが、Haskell の学習は、
いろいろカルチャーショックを味わえてエキサイティングな体験でした。
木構造のアルゴリズムから攻めると分かりやすいと思います。
でも、未だにモナドはよく分からないんですけどね…orz
Re: (スコア:0)
モナドの分かりにくさは、うまい例がないところにある気がする
実際のところ、処理がつながっているものはみんなモナドなのだが
Re: (スコア:1)
うまい例がないどころか、モナドの例はあらゆるプログラミングのなかに溢れかえっている
だってリストはモナドなんだよ。
こんな単純で身近な例があるのに「うまい例がない」という人は、モナドを理解していないとしか思えない
Re: (スコア:1)
他人に説明するための例えなんだから、「リストはモナド」で伝わらないなら、たとえあなたにとって自明でも例えとしては意味がないのでは?
Re: (スコア:0)
基数と順序数と実数が「ぜんぶ数」だと言ってもうまい喩えがないようなものですな
ちなみに「リスト」はモナドではない
Re: (スコア:1)
ちなみに「リスト」はモナドではない
俺が「リストはモナド」と言っているのはこのことを指しているんだけど
http://www.sampou.org/haskell/a-a-monads/html/listmonad.html [sampou.org]
君が「リストはモナドではない」というのは何の事を言っているの?
Re: (スコア:0)
それは「HaskellのListモナド」
HaskellではListを用いて非決定性をもつ計算の連鎖を実現しているとうこと
一般的にリストはモナドではないし(そもそも意味をなさない)、モナドの理解のためにHaskell特有の事情を例に挙げるのも相応しくない
Re: (スコア:0)
一般的にリストはモナドではないし(そもそも意味をなさない)
ある特定の言語でリストモナドの実装が標準ライブラリに存在しないことを指して「一般にはモナドはリストではない」と君が言いたいなら、君の中ではそうなんだろうけど、
それこそ、特定の言語、特定の実装を指さずに「一般のリスト」「一般のモナド」「一般の言語」についていう場合は、
「一般には」リストはモナドだというのは正しい。
モナドの理解のためにHaskell特有の事情を例に挙げるのも相応しくない
いや、これHaskell特有でも何でもないけど。例えばScalaの例。
http://eed3si9n.com/learning-scalaz/ja/List-Monad.html [eed3si9n.com]
標準ライブラリにモナドのフレームワークがある言語は稀だ
Re: (スコア:0)
やはり、悪い例から始まるといつまでたっても理解ができないようです
「リストのモナド」ってさあ、自分で言ってて意味が通らないと思わないの?
なんでモナドの性質を書くべきところに「リスト」なんて実装がくるわけ?
HaskellでList(これは、Haskellの型のListのことです)がモナドなのはモナド則を満たすようにしているからで、それ以外の理由はない
Listを直接Monadのインスタンスにせず、ListをnewtypeしてそっちをMonadのインスタンスにすることは可能だし、その場合Listはモナドではなくなる(もちろん独自にモナドにする場合は別)
> モナドというのは抽象的なフレームワークであって、
およそモナド則を満たすものがモナドであって、それ以外の一般論はないし、フレームワークでもない
Re: (スコア:0)
なんでモナドの性質を書くべきところに「リスト」なんて実装がくるわけ?
モナドを説明するときには、まず性質を説明すべきで、その後で具体例を説明すべき。
それは元コメもわかっていて、だからモナドを理解するためには「良い例が欲しい」しかし「良い例がない」と言っているわけだ。
話を戻すが、ここでの論点は「リストのモナドのインスタンスを実装して、モナドを説明するのは説明として適切かどうか」。
俺は「関数型を知らない人でもデータ構造としてのリストはよく知っているし、モナドのインスタンスを実装して見せるのも簡単だから、説明に適している。リストを実装して見せるのは「良い例」だ」といっている。
それなのに「リストモナドが標準ライブラリにない言語もある。リストのモナドインスタンスには他の実装もある。だから「一般には」リストはモナドではない」というズレた指摘をし始めたから、話がズレてるんだけど。
およそモナド則を満たすものがモナドであって、それ以外の一般
Re: (スコア:0)
さらに言えば、あなたの言ってる「「一般的に」リストはモナドではない」というのも、俺は意味を理解している。
Javaの標準ライブラリにはListクラスがあるが、標準ライブラリにはそのListのモナドのインスタンスはない。
だから、一般に「あるソフトウェアでソースコードにリストが定義されていれば、そのモナドインスタンスもソースコードに定義されている」は正しくないし、
その意味で「「一般的に」リストはモナドではない」というのも意味は通る。
ただし、我々の論点は「リストのモナドを実装して見せることは、説明に適しているか」であって、
俺の言っている「リストはモ
Re:割とオフトピックだが (スコア:1)
#2808317 [srad.jp] は三行でまとめようとして失敗した、まで読んだ。