2025年に本書は全面改定され、新しい書籍として公開されています。ご移動ください。 最高のコーディング体験 for AI a岡部 健Ken Okabekentutorialbook@gmail.com 関数型プログラミングが『銀の弾丸』である という非常識な常識 2022Functional Programming as the Silver bullet, that is the Insane common sense 2022
By Karthik Iyengar This article targets an audience that’s graduating from functional libraries like ramda to using Algebraic Data Types. We’re using the excellent [crocks](https://evilsoft.github.io/crocks/?source=post_page---------------------------) library for our ADTs and helpers, although these concepts may apply to other ones as well. We’ll be focusing on demonstrating practical application
id:ayato_pさんのUnderscore.jsがちょっと便利だったので紹介してみる。を読んで思ったのが、Underscore.jsって最近使っていないな、ということでした。 というのも、1年くらい前までは、Underscore + Backboneで素のJavascriptを書いていたのですが、最近はClojureScriptを書くようになったからです。 はじめに ClojureScriptではJavascriptのオブジェクトは直接は使いません。 JavascriptでコレクションというとArrayになりますが、ClojureScriptではSequence,Vector,ListがありJavascriptのArrayとは別物です。 リテラルで、[1,2,3]と書くとVectorを表すことになります。そして","は空白と等価なので[1 2 3]と表現出来ます。 さて、Clojure
私の所属する部署には、関数型が大好きな人が多くて、部署の技術者の応募条件にも「LISP、Haskell などの関数型言語」という項目がある。 「関数型を推奨しているのは何故?」 と聞かれたこともあるし、私自身、 「何で関数型やんなきゃいけないんだろう」 と思っていた一人である。 しかしまあ、関数型プログラミングの考え方をふんだんに使うBacon.jsを使うのに在る程度の知識は必要だな、と半信半疑のままOCamlを触ってみたり、すごいH本(すごいHaskell楽しく学ぼう!)を読んでみたり、実際にちょこっと書いてみたりしてみて、色々と良かったなと思えることがあったので、こういうテーマを掲げて、共有してみようと思う。 次の3つのポイントを、コードの例を織り交ぜながら考えてみる。 —————————————————————————- 1. 新しい概念を知ることが出来る 2. 役割を考える習慣がつ
※仕様の細かいツッコミはご勘弁を…。 オブジェクト指向で解く みんな大好きオブジェクト指向では、物単位で考えます。言わずもがなですね。やり方はいろいろあると思いますが、まずお弁当という単位で集めると 唐揚げお弁当クラス 状態 主食名 唐揚げ個数 値段 … 振る舞い: つまみ食い() 値段取得() 唐揚げ個数取得() … のような感じで、弁当に必要な要素と必用な処理をひとまとまりにして扱うというのがオブジェクト指向です。 お弁当スーパークラスを作って継承で唐揚げ弁当クラスを、というように拡張を考えた設計にするというのも汎用性が必要な場合は良いと思います。 では早速コードにしてみましょう。 言語はJavaScriptにしています。 (function(){ window.onload=function(){ ////////////////// // クラスの定義 // ///////////
私が関数型プログラミングについて度々耳にするようになったのは、数カ月前からです。でも当時は、それが何なのか見当もつかず、単なるバズワードだと思っていました。皆さんの中にも、そのような方は多いでしょう。それ以来、私は関数型プログラミングについて深く学び、この言葉を日々聞いてはいるものの内容を理解していない初心者の方のために、分かりやすく説明しようと思い立ちました。 関数型プログラミング言語の話になると、「 Haskell と Lisp は どちらが優れているのか 」という 議論 が 白熱する 傾向にあります。HaskellとLispはどちらも関数型言語ですが、実際には大きな違いがあって、それぞれに長所と短所があります。その具体的な内容については、この記事を読み終える頃には深く理解していただけると思います。この2つの言語には、それぞれから派生した言語があります。その中で恐らく皆さんが耳にしたこ
この記事の前編はこちら: JavaScriptユーザのための関数型プログラミング(前編) 遅延評価 遅延評価 は、 サンク や ジェネレータ などのもっと具体的な概念をカバーする一般的な用語の一種です。遅延評価は、その言葉が表すとおりのことを行います。つまり、値が必要になるまで評価しません。可能な限りずるずると、先延ばしにします。例えば、洗わなければならない食器が大量に、もしかすると無限にあるとします。食器を全て流しに置いて一度に洗うのではなく、ゆっくり、一度に1つずつ取って洗うのに似ています。 遅延評価の本質を少しでも理解しやすくするために、Haskellを使って説明したいと思います。まず、 プログラムがどのように評価を行うか を理解する必要があります。皆さんが慣れているほとんど全ての言語は、 最内簡約 を用いています。最内簡約とは、次のようなものです。
Double-click the code to edit the tutorial and try your own code. This tutorial contains code and discussion from the upcoming book Secrets of the JavaScript Ninja by John Resig. Our Goal Goal: To be able to understand this function: // The .bind method from Prototype.js Function.prototype.bind = function(){ var fn = this, args = Array.prototype.slice.call(arguments), object = args.shift(); return
About Er.js piggybacks on Neil Mix’s Thread.js which fakes threading in JavaScript 1.7 using coroutines and nested generator continuations. The goal is to replicate Erlang’s concurrent lockless process model and message-passing APIs in JavaScript. Running Concurrently Running a JavaScript function in the background is easy with Er.js: Er.spawn(myBackgroundFunction); Er.spawn starts a new Er.js pro
2006年10月16日07:30 カテゴリLightweight Languages perl/javascript - 関数内関数で仮引数を省略 そんなことありませんぞよ。 Structure and Interpretation of Computer Programs H. Abelson / G. Sussman / J. Sussman [邦訳:計算機プログラムの構造と解釈] IT戦記 - Perl で再帰呼出し時のスタック間データ共有 再帰呼び出しのスタック間でデータを共有する場合は、以下のように仮引数を使わなければならない。*1 以下のようにすればOK。もちろんdocument.allないしdocument.getElementsByTagName('*')を使えば再帰の必要もないのだけど例として手頃だったので。 function count_tags(node){ var
« Japanize 拡張機能 0.7.1 リリースのおしらせ | メイン | OSS コンファレンスで講演 » 2006年10月16日 JavaScript で Generic Programming 再帰呼び出しのスタック間でデータを共有する場合は、以下のように仮引数を使わなければならない。 IT戦記 - Perl で再帰呼出し時のスタック間データ共有 について、弾さんがクロージャを使って解決する方法を提示されています。それはそれでいいと思うのですが、JavaScript の場合は、もうひとつの書き方があります。Function.prototype.call を使う手です。 function count_tags(node) { return (function (node) { var kids = node.childNodes; for (var i = 0; i < kids.
積ん読してあった「ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門」を読んだんだけど、 その中にポイントフリースタイルというのが書いてあったので、 同じような事がJavaScriptでもできないか試してみる。 本書によると、ポイントフリースタイルっていうのは関数で関数を 定義しながらプログラミングをするコーディングスタイルの事だそうだ。 要は関数合成や引数の部分適用などにより高階関数を返すような関数を定義し、 それを呼び合いながらプログラムを書こうってこと。 JavaScriptは高階関数を扱えるので近い事はできそうだ。 引数の部分適用 まずは関数が引数の部分適用をできるようにする。つまりカリー化。 よくある、curry関数に関数と引数を渡す事で部分適用された関数を返すという方法だと 再度、部分適用する時に何度もcurry関数を呼び出す必要がある。 こんな風に
Joel Spolsky / 青木靖 訳 2006年8月1日 火曜 ある日、自分のコードを眺めていて、ほとんど同じに見える2つの大きなコードブロックがあるのに気付く。実際、一方が"スパゲッティ"、他方が"チョコレートムース"について言及しているところを別にすれば、どちらもまったく同じだ。 //簡単な例: alert("スパゲッティが食べたい!"); alert("チョコレートムースが食べたい!"); この例ではたまたまJavaScriptを使っているが、この後の話は別にJavaScriptを知らなくとも理解できるはずだ。 同じコードが繰り返し現れるのは、もちろん良くないことだ。だから関数を書くことにしよう: function SwedishChef( food ) { alert(food + "が食べたい!"); } SwedishChef("スパゲッティ"); SwedishChef(
こんなふうに書けるようになるよ この tz.$F_list を使って、例えば var Sequence= tz.$F_list.$struct({ _call_next: function(obj,next,args){ var self= this; setTimeout( function(){ // 関数を実行して、戻り値を「次」に渡す // next(obj.apply(this,args)); でも同じ self.$super._call_next(obj,next,args); },this.interval()); }, interval: function(){ return 500; } }); のようなオブジェクトを用意しておけば、 var $n=111; var fn= Sequence.from( function f1(i){ console.log(i); //
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く