2018年1月2日のブックマーク (8件)

  • 「Scala 関数型デザイン&プログラミング」の練習問題を解くための開発環境の構築(IntelliJ IDEA 編) - Qiita

    Scala 関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド」(原書:Functional Programming in Scala)の練習問題を IntelliJ IDEA 上で解くための開発環境の構築手順をメモっとく。 なお、ターミナルで練習問題を解く場合は「Scala 関数型デザイン&プログラミング」の練習問題を解くための開発環境の構築を見てね。 OS X での開発環境の構築手順 初期設定 サンプルコードを Git リポジトリからクローンする。Scala のビルドツール sbt が一緒に入ってるので、sbt に実行権限を付与する。IntelliJ IDEA 用のプロジェクトを生成するための sbt プラグインを追加する。IntelliJ IDEA 用のプロジェクトを生成する。 $ git clone https://github.com/fpi

    「Scala 関数型デザイン&プログラミング」の練習問題を解くための開発環境の構築(IntelliJ IDEA 編) - Qiita
    kzono
    kzono 2018/01/02
  • いろいろな引数渡しの方式 — 値呼び・参照呼び・名前呼び・必要呼び

    3.11  いろいろな引数渡しの方式 — 値呼び・参照呼び・名前呼び・必要呼び 参照呼出し 遅延評価と call-by-need, call-by-name 前節までの言語では,値呼び出しに基づいて関数呼び出しの際の引数渡しを実 現してきた.節では,FORTRAN, Pascal などに見られる 参照呼出し(call-by-reference)と,遅延評価(lazy evaluation)を使った, Algol60 に見られる 名前呼出し(call-by-name),Haskell などに見 られる,必要呼出し(call-by-need)といった引数渡しの方法をみてい く. 3.11.1  参照呼出し 前節で説明したように,値呼出しの下では,関数のパラメータに対する代入は 関数呼出し側に影響をおよぼすことはない.つまり,関数呼出しの前後で,あ る変数の内容が変わることがなく,呼出し側・関

    kzono
    kzono 2018/01/02
  • Scalaの名前渡しは遅延評価ではない - ぼっち勉強会

    今日はScalaの勉強。 名前渡しって「関数の引数を遅延評価させる」のだと思っていたのですが、ちょっと違いました。 Scalaのバージョンは2.9.2です。 まずはサンプルコード 名前渡しってそもそもどういうものか、段階的にサンプルコードを書いて確認してみます。 例えば簡単なロギングクラスを作るとします。 雛形を作成 object MyLog { val isDebug = true def main(args: Array[String]) { log("hoge") } def log(s: String) = { if(isDebug) { println("call log") println(s) } } } 体はlogメソッドです。 このメソッドは引数に文字列を受け取り、デバッグフラグがtrueの時だけ標準出力します。 このコードを実行するとこのようになります。 call l

    Scalaの名前渡しは遅延評価ではない - ぼっち勉強会
    kzono
    kzono 2018/01/02
  • [Scala] 名前渡し

    とりあえずいろいろ書いてみる。 Scala や タートルグラフィックス言語のドリトル、Google App Engine、Blogger などについてのメモ書きがメイン。 Scala で関数を定義する際、仮引数名と型名の間に 「 => 」を記載すると名前渡しとなり、値が必要になったときに式の値が評価される。 var x = 1; def main(args: Array[String]) { x = 1; notdelayed(x*2); x = 1; delayed(x*2); } def notdelayed(value : Int) { x = 100; println("notdelayed: " + value) } def delayed(value : => Int) { x = 100; println("delayed: " + value) x = 200; print

    kzono
    kzono 2018/01/02
    名前渡し
  • Scalaの=>記号の意味が多すぎるのでまとめた - Qiita

    格的にScalaを勉強し始めたのですが、=>という記号の使用される場面が多くて混乱したので、まとめました。 =>記号の意味一覧 => という記号はScalaの色々な場面で使用されます。 関数型の表現 ラムダ式 パターンマッチ 別名でのインポート @yasudakinenbiさんのご指摘で追加しました 引数の名前渡し 明示的に型付けされた自己参照(explicitly typed self reference) @kazznaさんのご指摘で追加しました では、以下でそれぞれの用法を見ていきます。 関数型の表現 関数を型として表現するのに使用します。 (引数の型) => (返り値の型)という形で使用します。 //Intを引数に取りStringを返す関数funcを、引数に取る関数の定義 def someFunc(func: Int => String): Unit = {/*some code

    Scalaの=>記号の意味が多すぎるのでまとめた - Qiita
    kzono
    kzono 2018/01/02
  • Haskell Maybeモナド 超入門 - Qiita

    Haskellではモナドと呼ばれる部品を組み合わせてプログラムを作ります。関数の評価に失敗したときにエラーを起こさずに処理する方法の初歩を説明します。Maybeモナドを手っ取り早く使うことを目的としているため、モナドの作り方や圏論には言及しません。 シリーズの記事です。 Haskell 超入門 Haskell 代数的データ型 超入門 Haskell アクション 超入門 Haskell ラムダ 超入門 Haskell アクションとラムダ 超入門 Haskell IOモナド 超入門 Haskell リストモナド 超入門 Haskell Maybeモナド 超入門 ← この記事 Haskell 状態系モナド 超入門 Haskell モナド変換子 超入門 Haskell 例外処理 超入門 Haskell 構文解析 超入門 【予定】Haskell 継続モナド 超入門 【予定】Haskell 型クラス

    Haskell Maybeモナド 超入門 - Qiita
    kzono
    kzono 2018/01/02
  • Haskell 例外処理 超入門 - Qiita

    Haskellでは失敗を処理するのにモナドと例外の2つの方法があります。手っ取り早く失敗を処理することを目的として、それらの初歩を説明します。 シリーズの記事です。 Haskell 超入門 Haskell 代数的データ型 超入門 Haskell アクション 超入門 Haskell ラムダ 超入門 Haskell アクションとラムダ 超入門 Haskell IOモナド 超入門 Haskell リストモナド 超入門 Haskell Maybeモナド 超入門 Haskell 状態系モナド 超入門 Haskell モナド変換子 超入門 Haskell 例外処理 超入門 ← この記事 Haskell 構文解析 超入門 【予定】Haskell 継続モナド 超入門 【予定】Haskell 型クラス 超入門 【予定】Haskell モナドとゆかいな仲間たち 【予定】Haskell Freeモナド 超入門

    Haskell 例外処理 超入門 - Qiita
    kzono
    kzono 2018/01/02
  • 再帰関数のスタックオーバーフローを倒す話 その1 - ぐるぐる~

    再帰関数のスタックオーバーフローを倒す話を何回かに分けてします。 連載目次 再帰関数のスタックオーバーフローを倒す話 その1 ← 今回 CPSとCPS変換の話 再帰関数のスタックオーバーフローを倒す話 その1.5 F#での「末尾」についての話 再帰関数のスタックオーバーフローを倒す話 その2 .NETにおける末尾最適化の方法についての話 再帰関数のスタックオーバーフローを倒す話 その2.5 継続モナドと、F#の残念さの話 再帰関数のスタックオーバーフローを倒す話 その3 すべてをあきらめて再帰をwhileに書き直す方法の話 はじめに 継続渡しスタイルもしくは継続渡し形式(Continuation Passing Style、以降CPS)という言葉を聞いたことがあるでしょうか。 今日はCPSの話をします。 前提知識は、F#のみです。 継続とは CPSの前に、まずは継続の話です。 継続と言って

    再帰関数のスタックオーバーフローを倒す話 その1 - ぐるぐる~
    kzono
    kzono 2018/01/02