タグ

関数型に関するigrepのブックマーク (19)

  • Ten reasons not to use a statically typed functional programming language | F# for fun and profit

    Are you fed up with all the hype about functional programming? Me too! I thought I’d rant about some reasons why sensible people like us should stay away from it. Just to be clear, when I say “statically typed functional programming language”, I mean languages that also include things such as type inference, immutability by default, and so on. In practice, this means Haskell and the ML-family (inc

    Ten reasons not to use a statically typed functional programming language | F# for fun and profit
    igrep
    igrep 2015/09/27
    ワロタwww
  • https://qiita.com/lambdalice/items/124199b62d66d7c745a1

    igrep
    igrep 2015/05/20
    "「関数型プログラミング言語」というナニカがあって、それは他の「オブジェクト指向プログラミング言語」だとかとは別物なのだ、というわけではない" 再三言われていることだけど忘れがち。
  • オブジェクト指向設計の原則と関数型プログラミング

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    オブジェクト指向設計の原則と関数型プログラミング
    igrep
    igrep 2015/03/23
    確かにそれは言えそう“SOLID原則を繰り返し適用することで、そのような単一のメソッドを持つ小さなクラス群ができてしまうのであれば、その機能はデータを持った振る舞い【訳注:クロージャのこと】として...”
  • 再帰関数のスタックオーバーフローを倒す話 その1 - ぐるぐる~

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

    再帰関数のスタックオーバーフローを倒す話 その1 - ぐるぐる~
  • 状態と参照透明性 - みゆっきのにっき

    状態は難しい 変数 入出力 難しいなら無くしてしまえばよい 状態を排除 参照透明性 言語処理系の外側の状態はどうしようもないので 一意型 モナド 状態は難しい 状態は難しい。 例えば変数。変数の値が自由に変更可能なら、ある変数を使用する際には、その変数を変更可能な全ての場所を考慮しなければならない。 global変数のようなスコープの広すぎる変数で混乱した、確保した領域を二重に開放するコードを書いた、といった経験は皆あるはずである。 難しいなら無くしてしまえばよい 状態の問題を解決したい。その手段の1つとして、状態を無くしてしまえばよい、という極端なものがある。 変数を無くしてしまう。外部の状態の利用、つまりファイルの操作だとかは当然禁止する。 変数を無くしてもチューリング完全の意味で計算できる範囲に影響はない1ので問題はない。 そうすると、どの関数も、引数が同じならいつ計算しても値が同じ

  • 関数型プログラミング言語の定義&実装の仕方の例 - Qiita

    前置き:何となく成り行きで何か書かないと心苦しいので、殴り書きレベル & 文才がなくてつまらない & 関数型言語の授業等を受けたことがある方にはものすごく当たり前の教科書的内容ですみませんが、取り急ぎ自分が容易に書けることを書きます。(この記事に直接の関係がある)質問があれば、(すぐに反応できない場合もあると思いますが)なるべく答えます。誤植などの指摘も助かります。 さて、プログラマならば誰しも一度は「オレオレ・オリジナル・プログラミング言語を作りたい」という欲求を抱きますよね。(抱きますよね?) そのとき、文字列レベルの文法(具象構文(concrete syntax)と言います)はわりと誰でも(?)考えられますが、それが木構造レベルでどういう風に表されて(抽象構文(abstract syntax)と言います)、どう動作するのか(操作的意味論(operational semantics)と

    関数型プログラミング言語の定義&実装の仕方の例 - Qiita
  • 「関数型言語」に関するFAQ形式の一般的説明 - Qiita

    前置き: 特定の言語ではなく、関数型言語一般に関する説明です。 ここに書くのが良いのかわかりませんが、それを考える時間ももったいないのでとりあえず書きます。必要が生じたら移転します。 皆様のご要望や自分の気分(?)により随時加筆修正します。 「それは違うんじゃない?」というご指摘はもちろん、初心者の方の素朴な疑問・質問や、「ここがよくわからない」「こういうことも書いてほしい」みたいなコメントも歓迎します。すぐに対応できない場合もあると思いますがすみません。Twitterのesumii宛でも構いませんが、コメントのほうが他の方も見つけやすくて良いと思います。当然ながら(他者に対しても)誹謗中傷等はご遠慮ください。 いただいたコメントはほぼ文に反映していますので、文を読むために、必ずしもコメントを読む必要はありません。もちろん、興味と余裕(?)があればコメントも読んでいただければ非常に有用

    「関数型言語」に関するFAQ形式の一般的説明 - Qiita
    igrep
    igrep 2015/01/30
    もろもろのリンクのいいまとめにもなってる。すばらしい。
  • 関数プログラミングのエッセンスと考え方

    2012 3 5 Copyright© 2011 IT Planning,Inc All rights reserved. LEXIFI 2000 LexiFi DSL LexiFi Web ( ) 2006 Haskell/Microsoft F# 2002 Jane Stree Capital High-Frequency) OCaml 200 (private fund) Ruby on Rails Scala Xen Citrix Xen OCaml http://cufp.org/ Microsoft F# Web fpish.net 2011 Scala, Akka Scala, Akka, Play IntelliFactory ( ) TypeSafe ( ) yesod (Haskell) Web COBOL Haskell Lift (Scala) Web Pytho

    igrep
    igrep 2015/01/30
    実に丁寧だ。
  • マルチコア時代のプログラマは関数脳になろう〜Java8のススメ〜 - Tech-Sketch

    CPUのクロックアップに限界が訪れ、マルチコア化することで処理性能向上を目指す時代になりました。これからのプログラマには、マルチコアで処理性能が向上するプログラム=マルチスレッドで並列処理が可能なプログラムを書く能力が必要になります。今回は「関数型」でプログラムを書くことによって、いとも簡単に並列化ができることを実例を元に解説します。 関数型プログラミングと並列処理 「関数型でプログラムを書くことで簡単に並列化できる」と書きましたが、そもそもここで言う「関数」とは何なのでしょうか? 関数型プログラミングの特徴 関数型プログラミングの「関数」を理解するためには、数学における「関数」を想像するとわかりやすいでしょう。 例えば三角関数を用いた y=cos(x) という式を考えてみます。この式に入力値 x=0 を与えた場合、いつでも必ず結果は y=1 になります。x= π/3 の場合は y =

    igrep
    igrep 2013/08/18
    おお、素晴らしい。C#みたいだ。Java 8楽しみ。
  • CRubyで末尾最適化を使った再帰 - yarbの日記

    Schemeなんかと違って、言語としてのRubyは末尾最適化(Tail Call Optimization)の実装は必須ではないけど、処理系としてのCRubyは2.0.0からオプション扱いで入っている、という話。2012年の6月ごろにはMatzさんはTCOをデフォルトにするという考えもあったようだけど、ここにある議論によれば、Ruby 2.0系のマイナーバージョンまで先延ばしになった模様。性急にTCOを入れなかった理由は、 バックトレースを失うので一般的なRuby利用者に影響が大きい set_trace_func()のサポートが大変 文法。ちゃんとドキュメントに落としこむのが難しい。これは半分冗談、半分気 ということらしい。JRubyでも、JVMがサポートしない限り実装が難しいという(あれ? Clojureは明示的な末尾呼び出しの最適化をやってるように思うけど)。 Rubyはイテレータで

    CRubyで末尾最適化を使った再帰 - yarbの日記
  • 何かズレた説明を見つけたので補正 - 技術をかじる猫

    電車の中で適当に眺めてたら、何か違う主張をしているブログが見つかったので、何をどう「違う」のかを検証してみる。 http://d.hatena.ne.jp/tanakmura/touch/20090429/1240996946 彼の主張は 誰が言い出したのか知らないが…世の中には関数型言語が並列プログラミングの次世代だとかいう主張を見かけることがある。 間違いとは言えないが、ちょっと誇張しすぎだろ、という話。 これはその通りだと思う。ただ、そこに行き当たるまでの論理が間違っているような気がした。 まず、最初にちょろっと書かれている、特殊な記法やライブラリについて、ここは特に反論はない。強いて挙げるなら、並列処理をする場合はそれが明示されるという点で、DSL*1でも無い限りどの言語でも並列化する所で専用の記法はある。 記法がださいだのなんだのは単に嫌いなだけだろうと解釈しておく。このへんは宗

    何かズレた説明を見つけたので補正 - 技術をかじる猫
    igrep
    igrep 2012/12/03
    http://d.hatena.ne.jp/tanakmura/20090429#1240996946 の反論。おもしろ遭難でもっと他の人から補足が欲しいものだ。
  • 副作用の無い関数型言語を使えば並列プログラミングがしやすいという幻想 - ブログやめる日記

    エロゲを売ったお金はネットブックになったのだった。 64GBSSD で Vista だったのでこれにした。僕はもうVista以外は使えない人になってしまったのだ。 誰が言い出したのか知らないが…世の中には関数型言語が並列プログラミングの次世代だとかいう主張を見かけることがある。 間違いとは言えないが、ちょっと誇張しすぎだろ、という話。 まず、最初に、話が混乱しないように、特殊な記法やライブラリを使うことによって並列化するのがいかに退化であるか、という話をしておこう。 「特殊な記法やライブラリを使って並列化」とは、 # なんか適当な言語があるとして… data0 = [4,1,4...] data1 = [1,9,8...] def nanika_operation a b = ... parallel_map data0 data1 nanika_operation # 並列実行DA!とい

    副作用の無い関数型言語を使えば並列プログラミングがしやすいという幻想 - ブログやめる日記
  • Google Code Archive - Long-term storage for Google Code Project Hosting.

    Code Archive Skip to content Google About Google Privacy Terms

  • Lazy K - Wikipedia

    Lazy K(れいじーけー)は組み込み関数が3つしかない、純粋関数型言語である。似た言語として、同じような表記をする、非純粋関数型言語であるUnlambdaがある。 概要[編集] 純粋関数型言語として、チューリング完全でありながら、絶対必要なエッセンスだけを抜き出したプログラミング言語である。遅延評価を行う。使用するにも、処理系を実装するにも、コンビネータ論理の知識が必要である。 標準入力をプログラムである関数の引数として受け取る。ただし、標準入力は1バイトごとのチャーチ数(英語版)のスコットエンコードされたリストとしてエンコードされ、出力も同様に1バイトごとのチャーチ数のスコットエンコードされたリストとなる。 Lazy K にて Unlambda を実装した場合、Unlambda で Unlambda を実装した場合に比べて約1/10のソースサイズで収まる。 組み込み関数[編集] Has

    igrep
    igrep 2011/08/17
    http://d.hatena.ne.jp/yuroyoro/20110601/1306908421 の元ネタかと思ったけど違うみたい。unlambdaの方か。
  • 檜山正幸のキマイラ飼育記 - JavaScriptで学ぶ・プログラマのためのラムダ計算

    JavaScriptによるテンプレート・モナド、すっげー簡単!」にて: 紙と鉛筆でラムダ計算を実行できることは必要だな、やっぱり。 なんて強調したので、ラムダ計算の入門、いってみよう。 [追記]練習問題集を追加しました。説明を読みながら、あるいは読んだ後で是非やってみてください。→「JavaScriptで学ぶ・プログラマのためのラムダ計算 問題集」[/追記] ※印刷のときはサイドバーが消えます。 内容: JavaScriptの関数リテラル ラムダ式ってなんだ ラムダ計算の体系と適用操作 ラムダ式の例をいくつか β変換 -- ラムダ計算のキモ! β変換を何度か実行してみる 中間まとめ、まだ続きがあるよ JavaScriptの関数リテラル 最初に、JavaScriptに関する知識を確認しておきましょう。なお、JavaScriptの対話的実行環境については「もっともお手軽な対話的JavaScr

    檜山正幸のキマイラ飼育記 - JavaScriptで学ぶ・プログラマのためのラムダ計算
  • JavaScript 1.8 では無名関数が書きやすくなる。 - IT戦記

    以下のブログで JavaScript 1.8 の新文法が紹介されています。 http://ejohn.org/blog/javascript-18-progress/ MDC の資料 -> http://developer.mozilla.org/en/docs/New_in_JavaScript_1.8 その中でも無名関数についての新文法が楽しいので紹介します。 // 関数の中に文が一つでその評価値を return してるような関数は function(x) { return x * x } // 以下のように書ける function(x) x * x たとえば [1, 2, 3, 4, 5].filter(function(x) x < 3); // [1, 2] element.addEventListener('click', function(e) e.stopPropargat

    JavaScript 1.8 では無名関数が書きやすくなる。 - IT戦記
  • Functional Java

    Functional Java is an open source library facilitating functional programming in Java. The library implements numerous basic and advanced programming abstractions that assist composition oriented development. Functional Java also serves as a platform for learning functional programming concepts by introducing these concepts using a familiar language. The library is intended for use in production a

  • Underscore.js

    Table of Contents Collections each, map, inject, detect, select, reject, all, any, include, invoke, pluck, max, min, sortBy, sortedIndex, toArray, size Arrays first, last, compact, flatten, without, uniq, intersect, zip, indexOf Functions bind, bindAll, delay, defer, wrap Objects keys, values, extend, clone, isEqual, isElement, isArray, isFunction, isUndefined Utility uniqueId, template Collection

  • 関数型言語での関数の基礎知識 - あどけない話

    関数型言語での関数について、Haskell を用いて説明します。 関数の型 関数の型は、-> を使って書きます。例えば、Int を Char に変換する chr という関数の型は、以下のようになります。 chr :: Int -> Char 一引数の関数の型は、まぁこんなもんだと思えるでしょう。びっくりするのは、引数が増えたときです。たとえば、replicate という関数の型を見てみましょう。 replicate :: Int -> a -> [a] replicate は、第二引数で指定されたデータを第ー引数に指定された個数分用意して、リストにして返す関数です。([] は配列ではなく、リストです。) 次のように動きます。 > replicate 3 "foo" → ["foo","foo","foo"] a は型変数といって、任意の型を取れます。なじめない人は、具体的な型を当てはめてみ

    関数型言語での関数の基礎知識 - あどけない話
    igrep
    igrep 2011/04/08
    概ねOCamlをかじった時に知ったっぽいと思ったけどやっぱHaskellはちゃうね。
  • 1