タグ

関数型言語に関するxiangzeのブックマーク (18)

  • IO モナドを使った Web アプリケーションの構築 - Don't Repeat Yourself

    Scala の記事を書くのは地味に初めてかもしれません.今回は,Scala の cats-effect というライブラリの中にある IO モナドを使って Web アプリケーションを構築してみたいと思ってやってみたので,その話を簡単にメモしておきます. cats とは? Scala 界隈だとかなり有名です.Scalaz か cats を選ぶことが多いと思います.Scalaz も大変すばらしいライブラリですが,今回は cats の話を少しします. cats は関数型プログラミングを Scala で行うために必要な抽象度の高い関数セットを提供するライブラリです.抽象度の高い関数セットとはどういうことか…私なりの理解で行くと,通常 Scala の List[A] や Option[A] などには flatMap という関数がついていますよね.あれはあくまで,個別具体のモナドに対する個別実装がなされ

    IO モナドを使った Web アプリケーションの構築 - Don't Repeat Yourself
  • モナドのすべて Haskell におけるモナドプログラミングの理論と実践に関する包括的ガイド

    モナドのすべて Haskell におけるモナドプログラミングの理論と実践に関する包括的ガイド Version 1.1.0 このチュートリアルは、モナドの概念とその関数プログラミングにおける応用に ついて、初中級の Haskell プログラマにわかりやすく、利用価値があるような 解説をすることを旨としています。読者は Haskell になれていることを前提と しますが、モナドに関する経験は要求していません。このチュートリアルは、多 くの題材をカバーしています。後半のセクションでは、前半の題材をよく理解し ていることを前提とします。順をおって、モナドプログラミングを例示するため のサンプルコードがたくさん用意されています。一読で、すべての題材を吸収し ようというのはお勧めできません。 このチュートリアルは 3 つの部分で構成されています。最初の部分は、 関数プログラミングにおけるモナドの基

  • ITプランニングにおける 関数プログラミング

  • [サンプル] 式木の利用例

    概要 Ver. 3.0 式木使って遊んでみます。 C# 3.0 の Expression Tree の一番すごいところは、匿名デリゲートと同じ記法で書けるのと、 式木をいろいろいじった後に動的にコンパイルして実行できるところ。 シンボリックに計算した結果を、動的に実行形式に変換して効率よく実行できるってのはすごい。 Expression<Func<double, double>> f = x => x * x; var df = f.Derive(); Console.Write("f = {0}\n", f); Console.Write("df = {0}\n", df); var df_ = df.Compile(); for (int i = -2; i <= 2; ++i) Console.Write("df({0}) = {1}\n", i, df_(i)); f = x =>

    [サンプル] 式木の利用例
  • Emacs で lambda をかわいくする — ありえるえりあ

    元ネタは http://www.emacswiki.org/cgi-bin/wiki/PrettyLambda です。 Lisp の lambda という文字列は読むにはかなり冗長なので λ のようにかわいく表示して可読性を向上しようという試みです。 以下のコードを ~/.emacs に記述するだけです。 (defun set-pretty-patterns (patterns) (loop for (glyph . pairs) in patterns do (loop for (regexp . major-modes) in pairs do (loop for major-mode in major-modes do (let ((major-mode (intern (concat (symbol-name major-mode) "-mode"))) (n (if (strin

  • 独習 Scheme 三週間 Teach Yourself Scheme in Fixnum Days

    Schemeに入力しよう 規範的な最初のプログラムはコンソール上に "Hello, World!"と出すプログラムです。 お気に入りのエディタを使ってhello.scmという 名前のファイルを以下の内容でつくりましょう。 ;最初のプログラム (begin (display "Hello, World!") (newline)) 最初の一行はコメントです。Schemeはセミコロンを見るとそれと その行のそれ以降を無視します。 begin-フォームはサブフォームのならびを導入する Schemeのやりかたです。この場合には、ふたつのサブフォームがあります。 最初のものは、その引数(文字列"Hello, World!")をコンソール(あるいは “標準出力”)に出力するdisplay手続きを呼んでいます。 つづいて、改行復帰を出力するnewline手続きを呼んでいます。 このプログラムを走らせるには

  • [B! クロージャ] makoto15のブックマーク

    id:naoya さんが Perl のクロージャの使い道を考えておられるようです。便上して、私が良く使う、3つのパターンを紹介してみます。なお、単なるコード・リファレンスとしての使い方は除外して付随するコンテキストが意味をもつクロージャの場合に限ります。 (2006年2月14日修正 use Fcntl のパラメータに :DEFAULT が抜けていたので追加しました。) コールバック・パターン イテレータにクロージャを渡して、イテレータの中から繰り返し呼び出してもらってコンテキストに副作用を及ぼす使い方です。クロージャの使い方の中でも最も自然に使えるものだと思います。以下、Ruby のブロック呼び出しっぽくコード・リファレンスを $yield パラメータに渡すことにします。へそ曲がりに BBS の CGI コード用に flock による排他ロックを例にしてみます。 package Mutex

  • Practical Scheme

    Shiro Kawai まだ下書き Schemeの特徴をあげるときに、「継続」や「call/cc」が出て来ないことはない。 でも、R5RSのcall/ccの項をいくら読んでも、どうもよくわからない。 call/ccを使えばC言語のbreakみたいなのとか、コルーチンとかいう スレッドもどきとかが書ける、というのはわかったけど、一体そういうのが書けて 何が嬉しいのか、そこんとこがピンと来ないんだ。 今、そこにある継続 プログラミングの世界の概念には、禅の公案のようなものがある。 それを説明する文章はほんの一文なのに、最初に目にする時、 その文は全く意味をなさない、暗号のように感じられる。 だがひとたびその概念を理解すると、 その概念の説明は確かにその一文で説明されているのがわかるのだ。 そんな、「分かれば分かる」という禅問答の中でも 「継続」は最も謎めいたものの一つと言えるだろう。 文献を紐

    Practical Scheme
  • approx-search.el

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • Sample Programming Assignments

    This selection of programming assignments, drawn from material developed for MIT's introductory computer science subject, is provided for the convenience of instructors teaching courses based on Structure and Interpretation of Computer Programs, and as a self-study aid for people using the book on their own. There is a separate directory for each assignment. In general, individual directories wil

  • Welcome to the SICP Web Site

    Wizard Book n. Hal Abelson's, Jerry Sussman's and Julie Sussman's Structure and Interpretation of Computer Programs (MIT Press, 1984; ISBN 0-262-01077-1), an excellent computer science text used in introductory courses at MIT. So called because of the wizard on the jacket. One of the bibles of the LISP/Scheme world. Also, less commonly, known as the Purple Book. from The New Hacker's Dictionary, 2

  • Project page for clamp - the C++ lambda preprocessor

    Project page for clamp - the C++ lambda preprocessor The C++ lambda preprocessor (clamp) converts C++ code containing lambda expressions into ordinary C++ code. Here's a simple example: vector<int> v; // ... std::for_each (v.begin(), v.end() , lambda (int &p) { if (p == 5) p = 0; } ); This example uses the standard algorithm for_each to apply an anonymous function to each element of a vector.

  • "Hassei" = Masahito Hasegawa's Home Page (Japanese)

    [ 京都大学 > 数理解析研究所 > 計算機科学 > 構成員, WWWFun, 計算機施設 ] [ Homepage in English ] 長谷川 真人 (はせがわ・まさひと) 京都大学数理解析研究所 教授 / PhD(エディンバラ大学) 理論計算機科学(計算の意味論、プログラミング言語の理論、圏論的・代数的モデル) [ 略歴 ] [ 研究所の研究紹介ページ ] [ 研究成果・研究関連情報 ]

  • Flash でクロージャ。 : torus solutions!

    Flash はクロージャが使えて便利です。 しかし、 最近はオブジェクト指向とか ActionScript 2.0 ばかり取り沙汰されて、 あまりクロージャの便利さが知られていない感じがします。 難しいオブジェクト指向の勉強はとりあえず先延ばしにしておいて、 気楽に使えるクロージャで楽しく ActionScript のプログラミングをしてみませんか? お題:N フレーム目に○○せよ たとえば、 Flash のムービーを再生して 5 フレーム後に、 指定したコードを走らせるには、 どうすればいいでしょうか? ムービークリップの第 5 フレームに、 実行させたいアクションを書けばいいだけです。 しかしこの方法は、 問題をちょっと一般化するだけで使えなくなります。 この 5 フレームの「5」という数値が予めわかっていない場合は、 上の方法は使えませんね。 onEnterFrame では「5 フレ

  • 2004-07-30

    実は昨日の話題はこれから書こうとする話とつながりがあるのだ。 (直接的には無いけど) (序) 突然であるが、Haskellは文字列処理が強力だと思う。 それも最強レベルに。 他のいわゆる文字列処理が得意であるとされる言語のように 正規表現による置換が可能であるとか、文字列がオブジェクトで 有用なメソッドがたくさん使えるとかそういった 小手先のものではなくてもっと根的なレベルで強力なのである。 それはHaskellに於いて文字列が文字のリストであらわされていることに 起因する。わからない人から見ると文字列がリストであるということは Cにおいて文字列が配列で表されているのとかぶるかもしれない。 Haskellが文字列をリストとして持っていてうれしいというのは Haskellが全言語中でもほとんど最強のリスト操作能力を持っているからである。 Cで文字列が配列になっていても何もうれしくないのは、

    2004-07-30
  • 11. 継続 | Schemeへの道

    継続(continuation)とは,式を評価している途中のある時点で,『いま得られた 値を使って,この後は何を計算するのか』を表すものである.たとえば,Scheme の関数呼びだしの式を評価する際には,まず関数とその引数を評価して,その 後で関数に引数を適用する. ==> (+ (* 1 2) (* 3 4)) ;; ==> (+ 2 12) ;; ==> 14 14 この式の場合,まず「+」,「(* 1 2)」,「(* 3 4)」を評 価したのち,「(+ 2 12)」を評価する. 各部分式の評価が左から右へ進むものとすると, たとえば,「(* 3 4)」を評価した後にするべき計算,つまり継続は, 『いま得られた値に2を加える』 である.この式の評価を完了するためには, Schemeのシステムは,この継続を知っていなければならない. 継続は,「何を評価して,その値によって次には何を行う」

  • Programming in Emacs Lisp: Table of Contents

    序文 これは誰のために書かれたものか Lisp の歴史 初心者の人へ 謝辞 訳者まえがき 1. List 処理 1.1 Lisp のリスト 1.1.1 Lisp のアトム 1.1.2 リストの中の空白 1.1.3 GNU Emacs によるリストのタイプの支援 1.2 プログラムの実行 1.3 エラーメッセージの出力 1.4 シンボルの名前と関数定義 1.5 Lisp インタプリタ 1.5.1 バイトコンパイル 1.6 評価 1.6.1 内部のリストの評価 1.7 変数 1.7.1 値のないシンボルに対するエラーメッセージ 1.8 引数 1.8.1 引数のデータ型 1.8.2 引数には変数の値やリストも使える 1.8.3 可変な数の引数 1.8.4 関数に間違った型の引数を与えると 1.8.5 関数 message 1.9 変数の値の設定 1.9.1 set の利用 1.9.2 setq

  • なぜ関数プログラミングは重要か

    John Hughes, Institutionen för Datavetenskap, Chalmers Tekniska Högskola, 41296 Göteborg, SWEDEN. rjmh@cs.chalmers.se この日語訳は原著者の承諾を得て山下がここに公開するものです。 この訳文についての、御指摘などは山下伸夫(nobsun .at. sampou.org)までおねがい いたします。 翻訳最終更新日 : 2011-09-17 原文 "Why Functional Programming Matters" 日語訳PostScript この論文は1984年以来何年ものあいだChalmers大学のメモとして回覧された。 1989年と1990年に幾分か改訂をしたのが[Hug89]と [Hug90]である。この版はもとのChalmer大学のメモ のnroff原稿をもとに

  • 1