Scalaで作って理解するモナド

Haskellでのモナド型クラスが有名で、Haskell創始者のひとりであるフィリップ・ワドラーはモナドについて"自己関手の圏におけるモノイド対象"と答えているらしい。そのほかにも調べているとモナドは箱に入った値を返す関数を箱の中の値に適用するといったものもあり、大体が数学の専門的な内容であったり抽象的な表現だったりするの勉強を始めたばかりの人には分かりづらい印象です。ScalaではOptionやFutureがよく使われるモナドだと思います。自分がScalaを勉強し始めたころはOptionについてはそんなに抵抗がありませんでしたが、Webアプリを作るときとかに出てくるFutureはfor式などで出てきてややこしかった気がします。

今回は自分でモナドインスタンスを実装してみてfor式に対する抵抗がなくなることを目指したいと思います。

続きを読む

scalaでjsonをパース後のASTを扱いやすいように型変換する方法について調べてみた

以前の作業scalaJSONをパースできるようになりましたが、そのままの抽象構文木(AST)の状態だと扱いづらいので変換する方法について調べてみます。

調べたところspray-json-shapelessというものがあり、これが丁度やりたいことに近いかと思います。

spray-json-shapelessでは以下のようにパース後の結果に対してconvertTo[T]を呼び出すことで任意のオブジェクトに変換できているようです。

package example

object TrySprayShapeless extends App {

  import spray.json._
  import fommil.sjs.FamilyFormats._

  case class Foo(a: String, b: Double, c: Boolean)

  val sprayJsonConvertResult = """{"a":"foo","b":42.0,"c":true}""".parseJson.convertTo[Foo]
  println(sprayJsonConvertResult)

}

spray-json-shapelessはshapelessというscalaジェネリックプログラミングを可能にするライブラリを使用しているのでここまでできると思うのですが、まずはspray-json自身で基本的な型に変換するまでの処理を追えるようになりたいと思います。

続きを読む

株とPythonの本を読んで株取引のシミュレーションを実装してみた

株とPython─自作プログラムでお金儲けを目指す本を読んでみました。

書いている内容としては株取引に必要となる基礎知識からシミュレーションを行うために必要なデータの収集方法、それから集めたデータを使ってのシミュレーター実装、取引用戦略と初めて株取引のプログラムを実装に必要な情報はまとめられていそうだと思いました。

サンプルのコードをもとに以下のように実装してみました。

github.com

続きを読む

金融商品取引業者の種類について調べてみた

金融商品取引業者の種類について調べてみたときのメモ

金融商品取引業者の種類

続きを読む

CPUの創り方をもとにverilog-hdlでシミュレーションをしてみた

  • CPUの創り方をもとにverilog-hdlでシミュレーションをしてみた
    • 環境構築(QuartusⅡ)
      • 新規プロジェクト作成
      • 新規verilogファイル作成
  • 4bitレジスタの作成
  • 演算装置(ALU)の作成
  • レジスタと演算装置を組み合わせてみる
  • ROMから読み込んだ命令を実行する
  • 命令のデコーダを作成する
  • クロック周波数を調整してキッチンタイマーとして使えるようにする

CPUの創り方をもとにverilog-hdlでシミュレーションをしてみた

CPUの創り方 にのっているキッチンタイマー(時間固定)のCPUをverilog-hdlでシミュレーションしてみました。実装についてはこちらに作られていたのがありましたので、これをもとに確認しました。

続きを読む

Ninety-Nine Scala Problemsを解いてみた

ドワンゴが公開してい新卒エンジニア向けのScalaの研修資料で一通り終わった後に説明があるNinety-Nine Scala Problemsについてリスト操作の問題を解いてみました。 せっかくなので何問かまとめてみようと思います。

P19 (**) Rotate a list N places to the left.

P19 (**) Rotate a list N places to the left.
Examples:
scala> rotate(3, List('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k))
res0: List[Symbol] = List('d, 'e, 'f, 'g, 'h, 'i, 'j, 'k, 'a, 'b, 'c)
scala> rotate(-2, List('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k))
res1: List[Symbol] = List('j, 'k, 'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i)
続きを読む

ecサイトをモデリングしてscalaで実装してみる

以前行っていたecサイトのモデリングについて実際にScalaで実装してみたいと思います。

今回は以下のユースケースに対応できるつくりにしたいと思います。

・ユーザはログイン画面でユーザ名、パスワードを入力してパスワード認証が行える。
・ユーザはショッピングカートに商品を入れることができる。
・ユーザはショッピングカートに入れた商品の品目を更新できる。
・ユーザはショッピングカートに入れた商品をクレジット、または銀行振り込みで購入できる。
・ユーザは商品の購入手続き時にクーポンコードを入力できる。
・クレジットカード支払いの場合、購入時に支払いが行われて配達予定日を表示する。

実装はこちらになります。Play Frameworkを使用しDBアクセスのライブラリにはslickを使っています。 先に動作を確認してみたいと思います。

続きを読む