りんごとバナナとエンジニア

エンジニア修行の記録

Scala

【Scala】A => B => C 型の関数の意味

Scalaのコードを読んでいると、時々 val f: A => B => C のような関数が出てくることがある。見るたびに少し混乱していたので整理。 この A => B => C は A => (B => C) と等しい。すなわち、型Aの引数を渡すと、 B => C である関数が返ってくるということ。…

【Scala】パターンマッチングでの "unbound placeholder parameter" エラー

「Scala関数型デザイン&プログラミング」を進めている。今は3章でデータ型を定義しているところなのだが、パターンマッチングを書いたときに凡ミスでエラーを起こしたのでメモ。 sealed trait List[+A] case object Nil extends List[Nothing] case class Co…

【Scala】再帰処理を末尾最適化するための考え方をSICPに学ぶ

Scala関数型デザイン&プログラミングでScalaと関数型プログラミングに慣れようとしている。最初の練習問題はn番目のフィボナッチ数を出力する関数を作るというもの。 はじめは以下のように書いた。 object Main { //@annotation.tailrec def fib(n: Int): In…

【Scala】Futureの落とし穴と参照透過性

最近同じチームのメンバーからScalaを教えてもらっている。この前は並列処理について教えてもらう機会があったが、彼はScalaの教本で最初に出てくるFutureはなるべく使いたくないという。なぜだろうと思っていたが、実際に小さなサーバをチームで実装してみ…