タグ

関数型に関するyohshiyのブックマーク (123)

  • GitHub - getify/Functional-Light-JS: Pragmatic, balanced FP in JavaScript. @FLJSBook on twitter.

    This book is a balanced, pragmatic look at FP in JavaScript. The first edition is now complete. Read here online for free, or: "Functional-Light JavaScript" explores the core principles of functional programming (FP) as they are applied to JavaScript. But what makes this book different is that we approach these principles without drowning in all the heavy terminology. We look at a subset of FP fou

    GitHub - getify/Functional-Light-JS: Pragmatic, balanced FP in JavaScript. @FLJSBook on twitter.
    yohshiy
    yohshiy 2016/10/18
    JavaScript での関数型プログラミング。大作っぽい。
  • Clojure vs Haskell

    gist.md Haskell vs Clojure The JSON data is in the following format { "Genesis": { "1": { "1": "In the beginning..." , "2": "..." }, "2": { ... } }, "Exodus": { ... }, ... } In JSON, keys aren't ordered and must be strings. The goal is to parse the JSON file, order everything correctly (which means parsing the keys into integers), and produce an array that looks like this: [ ("Genesis", 1, 1, "In

    Clojure vs Haskell
    yohshiy
    yohshiy 2016/09/15
    Clojure と Haskell だと Clojure の方が簡潔に書けるよ という内容。
  • OCamlでJavaScriptコードが書ける「BuckleScript」が登場 | OSDN Magazine

    Bloombergは9月1日、OCamlのコードをJavaScriptのコードにコンパイルする「BuckleScript 1.0」を発表した。同種のコンパイル型言語であるTypeScriptと比べて10倍高速にコードをコンパイルできるという。 BuckleScriptは、TypeScript、BabelJSなどに着想を得て、読みやすさと既存のJavaScriptライブラリへの統合のしやすさを重視して開発されたもの。フランスの国立情報学自動制御研究所(INRIA)で開発された関数型言語「OCaml」コンパイラのJavaScriptバックエンドで、スムーズな統合とクリーンなコード生成が可能という。生成されたコードは解読がしやすい上に軽量としている。ライセンスはLGPL。 開発チームはTypeScriptより優れている点として、OCamlが型システムや強固な型推論を持つ点を挙げている。ネイティ

    OCamlでJavaScriptコードが書ける「BuckleScript」が登場 | OSDN Magazine
  • 可変性の回避 ― Rubyへの関数型プログラミングスタイルの適用 | POSTD

    稿では、関数型プログラミングのコンセプトを実用的な方法でRubyのコードに盛り込む方法について紹介します。これは、私が「関数型プログラミングのスタイル」と呼んでいるものです。 私が言う「実用的」とは、関数型プログラミングのスタイルを取り入れた後もなお、コードの見た目や印象にRubyの特徴が残っていることを意味します。Rubyは、Haskellではありませんし、Haskellであるべきでもありません。考え方としては、この言語の性質を 利用しよう とするものであって、それに反することをするわけではないのです。出来上がったコードは、Rubyユーザにとって簡単に理解できるものであるべきです。うまくいけば、使い慣れているものよりも簡単と感じていただけるはずです。 では、可変性を回避する利点、方法、欠点、そして可変性の回避が適切ではないケースについて見ていきましょう。 なぜ可変性を回避するべきなのか

    可変性の回避 ― Rubyへの関数型プログラミングスタイルの適用 | POSTD
  • Haskell、Scala、ML、Scheme:あなたが次に学ぶ関数型言語 | POSTD

    (編注:2016/7/27、頂いたフィードバックを元に記事を修正いたしました。) 学生たちから、次に学ぶ言語はどれがいいのかとよく聞かれます。IT業界で働きたい人にお薦めするのは、現在盛んに使われている言語です。C++Java、C#はもちろん、PythonRubyPHPPerlなども挙げられるでしょう。 一方、向学のためという人や、学術研究や起業に関心がある人にとって、次の言語を選ぶ基準となるのは、就職に有利かではなく言語の表現力でしょう。学術研究や起業活動を行うには、プログラマとしての能力を何倍にも高める必要があります。そして、(おそらく)確立されたコードベースを扱った経験はないでしょうから、手元にあるタスクにとって最適な言語を自由に選ぶことができます。 この記事では、勉強に適したHaskell、Scala、ML、Schemeという4つの言語を、私の好きな特徴や参考資料のリストと

    Haskell、Scala、ML、Scheme:あなたが次に学ぶ関数型言語 | POSTD
    yohshiy
    yohshiy 2016/07/27
    実用的というより学習用言語の紹介。ちょこちょこ違うかなというところはあるが、突っ込んだ内容の言語紹介はいいと思う。
  • 各言語に広まったRx(Reactive Extensions、ReactiveX)の現状・これから - Build Insider

    ではなぜネットフリックスがマイクロソフト発祥のテクノロジを利用するようになったのだろうか。実は、RxJavaの初期の開発者であるJafar Husain氏は、もともとマイクロソフトに勤めていて、世界で最初にReactive Extensionsを紹介した人物でもあるのだ。その後にネットフリックスに転職し、RxJavaの誕生に深く関わることになる。 一方でオリジナルのRx.NETの作者であるErik Meijer氏もまた、マイクロソフトを辞めた後に、HackやDartなどの新興言語の支援に関わる他、Principles of Reactive Programmingといった学習コースをScalaの作者であるMartin Odersky氏らと開講するなど、言語の枠を超えて活躍している。 Rxとマイクロソフトのオープンソース 昨今のマイクロソフトのオープンソースへの傾倒を疑うものはもはやいないだ

    yohshiy
    yohshiy 2016/05/12
    React.js との対比とかにも、触れて欲しいな。
  • プログラマの三大美徳の啓発の勧め : 怠惰、短気、傲慢 ― JavaScriptで遅延評価 | POSTD

    (編注:2016/5/31、頂いたフィードバックを元に記事を修正いたしました。) larry wall 怠慢と勤勉 コンピューティングにおいて、”laziness(怠惰)”は幅広い意味の単語です。大抵は、もし必要が無ければ何もしないということを意味します。その正反対を指すのは”eager(勤勉)”です。後で必要になる場合に備えて、できるだけ働くということを意味します。 以下のJavaScriptを見てみましょう。 function ifThen (a, b) { if (a) return b; } ifThen(1 === 0, 2 + 3) //=> undefined ここで、問題です。「JavaScriptは 2+3 を評価する?」答えはお分かりですね。「評価する」です。呼び出し関数に、引数を引き渡すこととなると、JavaScriptは eager(勤勉=先行評価) で、式の全てを

    プログラマの三大美徳の啓発の勧め : 怠惰、短気、傲慢 ― JavaScriptで遅延評価 | POSTD
    yohshiy
    yohshiy 2016/05/09
    遅延評価の Lazy が怠惰と同じ意味ってだけで、三大美徳と関係なく、遅延評価の解説
  • 関数型プログラミングはまず考え方から理解しよう

    関数型プログラミングが注目されて久しいです。 そろそろ勉強しておかないとなぁということで調べてみるものの、情報として出てくるのは"高階関数","カリー化","遅延評価","モナド"などの物々しい単語の数々。これらを勉強して理解した気になったものの、プログラムを書こうと思うと全然書けませんでした。 結局、関数型言語を実現する手段を学ぶ前に関数型と言われるパラダイムを理解しないことには書けません。ということでここでは関数型プログラミングの"手法"ではなく、オブジェクト指向と関数型プログラミングを比較しながら考え方の違いを見ていきます。 日の例題 プログラミング課題を設定してオブジェクト指向と関数型で解答してみましょう。 課題: 唐揚げ弁当がいくつかあるとします。それぞれ唐揚げが複数入っています。 この中からx個の唐揚げをつまみいするプログラムを作りましょう。 つまみいはバレないようにする

    関数型プログラミングはまず考え方から理解しよう
  • Erlang仮想マシンでLispを実現するLFE

    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が最近リリースされ、重要な変...

    Erlang仮想マシンでLispを実現するLFE
    yohshiy
    yohshiy 2016/04/22
    前からある気がしてたけど、ようやく 1.0 なんだ。
  • JavaScriptユーザのための関数型プログラミング(前編) | POSTD

    私が関数型プログラミングについて度々耳にするようになったのは、数カ月前からです。でも当時は、それが何なのか見当もつかず、単なるバズワードだと思っていました。皆さんの中にも、そのような方は多いでしょう。それ以来、私は関数型プログラミングについて深く学び、この言葉を日々聞いてはいるものの内容を理解していない初心者の方のために、分かりやすく説明しようと思い立ちました。 関数型プログラミング言語の話になると、「 Haskell と Lisp は どちらが優れているのか 」という 議論 が 白熱する 傾向にあります。HaskellとLispはどちらも関数型言語ですが、実際には大きな違いがあって、それぞれに長所と短所があります。その具体的な内容については、この記事を読み終える頃には深く理解していただけると思います。この2つの言語には、それぞれから派生した言語があります。その中で恐らく皆さんが耳にしたこ

    JavaScriptユーザのための関数型プログラミング(前編) | POSTD
    yohshiy
    yohshiy 2016/04/13
    Functor の日本語訳が「間手」って初めてしった。
  • Bloomberg、OCamlのJavaScriptバックエンドであるBuckleScriptをオープンソース化

    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が最近リリースされ、重要な変...

    Bloomberg、OCamlのJavaScriptバックエンドであるBuckleScriptをオープンソース化
  • F#の過去,そして未来 - F# Gothamでの議論より

    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が最近リリースされ、重要な変...

    F#の過去,そして未来 - F# Gothamでの議論より
  • Redditのデータ分析における、20のプログラミング言語とScalaの比較 | POSTD

    調査:Subredditsに投稿される肯定的・否定的意見の分析 先週、私は 素晴らしくて、少し笑える非公式の調査 を偶然見つけました。これはTobias Hermann(ハンドルネームは Dobiasd )が行った調査で、subredditのフィードから20以上のプログラミング言語に関するスレッドを探し出し、ユーザ同士のやりとり、コメント、意見を再度見直したものです(警告:ユーザによる不適切な投稿もあるので、職場での閲覧には注意が必要です)。それでも、私はTobiasの調査内容をとても気に入り、Typesafeのブログに記事の投稿を打診するため、そして、なぜ彼がこのような興味深い実験を行ったのかの理由を聞くために、彼にコンタクトを取りました。彼はとても謙虚でありながら、その返事からは好奇心がみなぎっていることが感じられました。以下がTobiasからの返事です。 “正直、どうして私がこのよう

    Redditのデータ分析における、20のプログラミング言語とScalaの比較 | POSTD
  • JavaScriptのモナド | POSTD

    恒等モナド Maybeモナド リストモナド 継続モナド Do 記法 連鎖呼び出し モナド とは、一連のステップによって実行する計算を記述する際に使用する、1つのデザインパターンです。 純粋関数型プログラミング言語 では、モナドは 副作用を管理する ために広く利用されていますが、 マルチパラダイム言語では、モナドで複雑性を制御することもできます 。 モナドはデータ型をラップして、空の値を自動的に伝播したり( Maybe モナド)、非同期コードを簡略化したり( 継続 モナド)といった、新たな動作を既存のデータ型に追加します。 一連のコードをモナドと見なすためには、その構造には次に挙げる3つの要素が含まれていなければなりません。 型コンストラクタ — 基的な型に対してモナドの動作を追加した型を作成する機能です。例えば、基的なデータ型 number に対して、 Maybe<number> とい

    JavaScriptのモナド | POSTD
  • GitHub - MostlyAdequate/mostly-adequate-guide: Mostly adequate guide to FP (in javascript)

    This is a book on the functional paradigm in general. We'll use the world's most popular functional programming language: JavaScript. Some may feel this is a poor choice as it's against the grain of the current culture which, at the moment, feels predominately imperative. However, I believe it is the best way to learn FP for several reasons: You likely use it every day at work. This makes it possi

    GitHub - MostlyAdequate/mostly-adequate-guide: Mostly adequate guide to FP (in javascript)
    yohshiy
    yohshiy 2015/07/15
    JavaScript による関数型ガイド
  • Translating Haskell to C++ metaprogramming

    Haskell and C++ are very different programming languages. Haskell is purely functional and C++ is imperative. While ‘normal’ C++ is imperative, C++ metaprogramming is purely functional, just like Haskell. This blog shows examples of Haskell code that I’ve translated to C++. Why would you do this? Last week I blogged about Blasien. Blasien is a set of header files for writing literal validated XML

    yohshiy
    yohshiy 2015/07/13
    C++ のメタプログラミングを駆使して Haskell のコードを C++ のコードに変換する方法の解説
  • es - extensible shell

    Es is an extensible shell. The language was derived from the Plan 9 shell, rc, and was influenced by functional programming languages, such as Scheme, and the Tcl embeddable programming language. This implementation is derived from Byron Rakitzis's implementation of rc, and was written by Paul Haahr & Byron Rakitzis. Why? Es is an extensible Unix shell with first class functions, lexical scope, ex

    es - extensible shell
    yohshiy
    yohshiy 2015/06/23
    es(Extensible Shell)。関数型言語の影響を受けた拡張シェル。
  • Go vs Rust : Productivity vs Performance

    Recently, I have been spending some time learning both Go and Rust languages and really excited about these languages evolving differently to solve different problems. I think Rust will attract developers from C, C++, Fortran and will be used for developing high performance systems like gaming, browsers, telco servers, distributed computing systems as well as low level, cpu efficient embedded/micr

    yohshiy
    yohshiy 2015/06/17
    開発効率とパフォーマンスの視点からの Go と Rust の比較。開発効率とコードの長さは完全に同じではないがいい指標だとは思う。結果は Rust が速く、 Go は作りやすい。そりゃそうだろという結果に終わっただけ。
  • Jupyter Notebook Viewer

    # This notebook is a semi top-down explanation. This cell needs to be # executed first so that the operators and helper functions are defined # All of this is explained in the later half of the notebook using Compose, Interact Compose.set_default_graphic_size(2inch, 2inch) points_f = [ (.1, .1), (.9, .1), (.9, .2), (.2, .2), (.2, .4), (.6, .4), (.6, .5), (.2, .5), (.2, .9), (.1, .9), (.1, .1) ] f

    yohshiy
    yohshiy 2015/06/03
    Julia による関数型幾何。 Stream 的に図形処理をやってエッシャーの Square Limit (正方形の極限) を描画している。
  • 簡潔なJavaコード

    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が最近リリースされ、重要な変...

    簡潔なJavaコード
    yohshiy
    yohshiy 2015/05/25
    Java での Stream (高階関数を使ったデータ処理) の解説。