日記
なんか置換の初歩的っぽいことでつまってる。 Permutation トレイトを Int から Int への写像 (PartialFunction) として定義する(コードは Scalaで書いてる):trait Permutation extends PartialFunction[Int, Int] class PermutationImpl(val suffices: Seq[Int]) extends Permutation{ def isDefinedAt(i: Int): Int = suffices.indice /** * 置換の2行表記で、上の行の値が与えられたらその下の値を返す */ def apply(i: Int) = suffices(i) }
PermutationImpl クラスの suffices フィールドは、置換の通常の2行記法での下の段の数字の列で、apply(Int) メソッドは上の段の数字が渡されると下の段の数字を返す:
val p = new PermutationImpl(Seq(3, 1, 0, 2)) assert( p(0) == 3 ) assert( p(1) == 1 )
ここでの p は
という置換に対応する。 念のため。
さて、2つの置換は * 演算子によって合成できるようにする。 これは(通常使われる)合成写像として定義:
class PermutationImpl(val suffices: Seq[Int]) extends Permutation{ ... def *(that: Permutation): Permutation = { val thiz = thisnew Permutation{ def isDefinedAt(i: Int): Boolean = thiz.isDefinedAt(i) def apply(i: Int): Int = thiz(that(i)) // thiz と that の apply() メソッドを合成 } } }
使い方は
val p0 = new PermutationImpl(Seq(3, 1, 0, 2)) val p1 = new PermutationImpl(Seq(1, 2, 0, 3)) val cp = p0 * p1 assert( cp(0) == 1 ) assert( cp(1) == 0 ) assert( cp(2) == 3 ) assert( cp(3) == 2 )
ここまでは普通の数学的な定義を実装してるだけ。 さて、ここで Permutation トレイトに、Seq[E] オブジェクトを受け取ってそれを置換して返すメソッド apply(Seq[E]) を定義してみる:
trait Permutation extends PartialFunction[Int, Int]{ ... def apply[E](seq: Seq[E]): Seq[E] = ??? }
この apply(Seq[E]) メソッドは任意の2つの Permutation オブジェクト p0, p1 と任意の Seq オブジェクト seq について以下の assert 文を満たさないといけないハズ:
val p0: Permutation = ??? val p1: Permutation = ??? val seq: Seq[E] = ??? assert( p0(p1(seq)) == (p0 * p1)(seq) )
さて、この apply(Seq[E]) メソッドはどう実装したらいいのか・・・ ちなみに、apply(Seq[E]) メソッドに Seq(0, 1, 2, 3) を渡すと、コンストラクタに渡された Seq と同じものが返ってきてほしいハズ:
val p = new PermutationImpl(Seq(3, 1, 0, 2) ) assert( p(Seq(0, 1, 2, 3)) == Seq(3, 1, 0, 2) )
こんなの簡単じゃん!って思うでしょ? 簡単かもね。

- 作者:齋藤正彦
- 出版社/メーカー:東京図書
- 発売日: 2014/04
- メディア:単行本
- この商品を含むブログを見る
ジョジョで山岸由花子役やってたので、ちょっと能登麻美子さんの web ラジオを聴いてみたのだが、なんか軽くスピリチュアルな話やってて「うーむ」となった。 癒やしボイスで言われると洗脳されるかもw そのうち水素水とか推し出したりして。
ものすごく今更な話、第5部でジョジョが「GIOGIO」なのってイタリア語の関係だったかと思うけど、DIOの子供かもしれない、DIODIO みたいなところもあるのかな? なんのこっちゃ。
ツイート (ツイート数 30)
@waman10da: 早くボケる老人には共通点があった!老人こそ体を鍛えないと要介護や早く死ぬ危険増 URL @biz_journalから
@waman10da: 『コーヒーには酔い醒ましの効果が無いだけでなく、酔っ払っている自覚を持つのがさらに難しくなります。』 / “なぜか広まっているコーヒーにまつわる4つの誤解 | ライフハッカー[日本版]” URL #食品
@waman10da: 荒浪和沙「合格したああああ!!!!」⇒ URL #アメブロ @ameba_officialさんから
@waman10da: RT @kazusa_aranami: 【速報】合格しました!!!!!!!!!!!!
@waman10da: 『カラマーゾフの兄弟」上下を読んで感動した。その後中巻を発見してびっくりした』絶望保険『絶望読書』『なぜ私だけが苦しむのか』 - わたしが知らないスゴ本は、きっとあなたが読んでいる URL
@waman10da: ファルージャを奪還 ISの拠点だったがイラク軍が2年半ぶりに URL @HuffPostJapanさんから
@waman10da: RT @onsenradio: 抽選で声優さんのサイン入りTシャツが貰える<音泉>のTシャツキャンペーン」開催ッ。配信中の杜王町RADIO内で杜王町RADIOTシャツ紹介中ッ! #jojo_animeURL #音泉URL…
@waman10da: 『この調査方法は、因果関係を過大評価する方向に働いていると思われます。にもかかわらず、症状との関連性が認められなかったのですから、その結果は、ゆるぎないものと考えるのが妥当です』 / “正しくは「速報と変わ…” URL #医療・医学 #統計
@waman10da: RT @tanakh: URL概要:一般化スーパーマリオブラザーズがPSPACE完全であることを示す。これは前回のNP困難の証明(2014年)よりも強い性質の証明である。任意の大きさの画面と、全てのオフスクリーンスプライトの状態を覚…
@waman10da: RT @BELCORNO: ラテアート【ハイスクール・フリート】LatteArt【High School Fleet】#はいふり #ハイスクール・フリート @hai_furiURL
@waman10da: “統合開発環境Eclipseの最新版「EclipseNeon」リリース。Node.js対応、PHP 7対応、Javaリファクタリング強化、Docker対応強化、Cloud F…” URL#eclipse#node.js #Docker
@waman10da: Paradigm Lost 出たよ! URL引用させて頂きました @shiorin871 @cacalillos @eiryu#nack5 #アフィリア