[解決済み] ジッパーがコモナドである理由を理解する
質問
のフォローアップです。 回答 の続きです。
各項目をマッピングする必要があるとします
a:A
の
List[A]
から
b:B
という関数で
def f(a:A, leftNeighbors:List[A]): B
を生成し
List[B]
.
明らかに、私は単に
map
を呼び出すことはできませんが、リスト
ジッパー
. ジッパーは、リスト内を移動するためのカーソルです。これは、現在の要素へのアクセスを提供します (
focus
) とその隣接要素へのアクセスを提供します。
これで、私の
f
を
def f'(z:Zipper[A]):B = f(z.focus, z.left)
で、この新しい関数を渡すと
f'
を
cobind
のメソッドを
Zipper[A]
.
は
cobind
は次のように動作します。
f'
を呼び出した後、ジッパーを移動させ、さらに
f'
を呼び出します。
新しい
移動したジッパー、再びジッパーを移動、などなど......ジッパーがリストの最後に到達するまで続けます。
最後に
cobind
は新しいジッパーを返し、そのタイプは
Zipper[B]
に変換され、問題は解決します。
ここで
cobind[A](f:Zipper[A] => B):Zipper[B]
と
bind[A](f:A => List[B]):List[B]
というわけで
List
は
Monad
であり
Zipper
は
Comonad
.
意味はあるのでしょうか?
どのように解決するのですか?
この質問は未解答リストのトップに定期的に表示されるため、私のコメントを回答としてここにコピーさせてください - とにかく 1 年前よりかなり建設的なものは何も現れていません。
A
List
はコモナドと同じように(複数の方法で)見ることができますが、一方
Zipper
はモナドとしてキャストすることができます(これもいろいろな方法で)。その違いは、概念的にステート マシンに建設的にデータを追加することに重点を置いているかどうかです(これは
Monad
インターフェイスがそうです)、または、そこから "分解的に状態を抽出すること(これこそ、
しかし、「この理解は意味があるのか」という問いに答えるのは簡単ではありません。ある意味ではそうですが、別の意味ではそうではありません。
関連
-
[解決済み] 述語で配列を2つに分割するには?
-
[解決済み] IntelliJ IDEAで依存関係が変更された後、build.sbtから強制的に再ロードするには?
-
[解決済み] Scalaのforループは下降か減少か?
-
[解決済み] SBTが終了せずに実行を停止する
-
[解決済み] Scalaのパターンマッチはなぜ変数で機能しないのですか?
-
[解決済み] Scalaの配列の初期化
-
[解決済み] Scalaのリストを作成するための好ましい方法
-
[解決済み] scalaは推論される型の「許容される複雑さ」にどのような制限を設けているのでしょうか?
-
[解決済み] リスト[Option]からNoneを除外するには?
-
[解決済み] 単純な case class の順序を定義する簡単な慣用的方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 述語で配列を2つに分割するには?
-
[解決済み] 依存するメソッドタイプの説得力のある使用例とは?
-
[解決済み] IntelliJ IDEAで依存関係が変更された後、build.sbtから強制的に再ロードするには?
-
[解決済み] Scalaでは、'val a. = _' (アンダースコア)は具体的にどのような意味ですか?A = _' (アンダースコア)とはどういう意味ですか?
-
[解決済み] scalaの列挙を理解する
-
[解決済み] SBTが終了せずに実行を停止する
-
[解決済み] Scalaです。リスト[Future]からFuture[List]への変換は、失敗したFutureを無視する。
-
[解決済み] Scalaのリストを作成するための好ましい方法
-
[解決済み] private[this] vs private
-
[解決済み] Any、AnyVal、AnyRef、Objectの関係と、Javaコードでのマッピングについて教えてください。