DiaryExceptionスマートフォン用の表示で見るDiaryExceptionこの広告は、90日以上更新していないブログに表示しています。2009-11-26プログラミングHaskellをScalaで解く(その1.892857)Scala引き続き、『プログラミングHaskell』の例題と練習問題をScalaで書いてみる。練習問題6.8.3」で「concatを再帰で作れなかった。ListのListが上手くマッチしない。」と書いたが、これは単なる僕のミスだった。Overflowですぐに間違いを指摘されて、恥ずかしかったが、勉強になった。}}そもそも、リストのリストを作るならList(1,2)::List(3,4)::List(Nil)とした方が正確だった。NilはList()、あるいはList(Nothing)を指す。List(Nil)を追加しなければ、MatchErrorを起こすことが分かる。DiaryExceptionの「前回の改良」で型推論をするための指定Tを利用したが、これではどの型でも当てはまることになり、都合が悪い場合がある。関数を比較演算子を持つ型に限定したいといった場合である。練習問題7.8.2」以降で、比較演算子を関数の実装の中で用いているために、Any型を使えずIntに限定していたが、もし型を限定できるなら、より正確に関数を実装できる。Haskellで書くと、こう。...こういう型の指定をScalaでも書ける。「Aという型が、Orderedクラスを継承しているか、暗黙的型変換でOrderedクラスを継承した型になれる」ということを表現している。使って書くと「Aが、暗黙的型変換を許さず、Orderedクラスを継承した型である」ということを表現する。Haskellに比べ、見難さが露呈してきた感じがあるが、正確に実装を書ける手段が提供されていることは嬉しい。文字列」で飛ばした、シーザー暗号の例題を取り上げる。そのために必要な関数を定義していく。x)).mkString}shiftがHaskell版に比べ複雑になっているのは、Scalaの剰余演算子の仕様によるもの。-1となり、負数が来ると他の言語と結果が異なるため、if-elseによる場合分けが必要だった。これを用いて、シーザー暗号によって暗号化された文字列の解読を試みる。リストを回転これで解読に必要な関数の定義が完了する。適した文字ずらし数の符号を反転させてencodeすることで元の文字列を得る}このcrack関数の中で、幾つかローカル関数を定義したが、minimumとpositionsに型推論指定Aを用いている。tableという一般的な文字の出現頻度表が与えられているので、カイ二乗検定によって最も一般的な分布に近くなる文字ずらし数を総当たりのような手段で求める。useful今回はここまで。DiaryExceptionを書きました。用のDockerfileを作ったリセットピンをIOピンとして使うESP8266であれこれする本を書いた月別アーカイブはてなブログをはじめよう!LaclefYoshiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。