休日ワイ ワイ「(カタカタカタカタカタ・・・)」 ワイ「(ッターーーーン!!!)」 ワイ「あっ、ぜんぶ消えてもうた」 娘(4歳)「パパ?」 娘「私のお願いしたシステム、作ってくれた?」 娘「曜日によって色々なメッセージが表示されるシステム」 ワイ「おお、鋭意製作中やで(震え声」 ワイ「今、休日かどうかを表示する機能のコーディングを開始したところや」
プログラミングの考え方にはオブジェクト指向と関数型の2種類があります。オブジェクト指向に比べると理解しにくく挫折しがちな「Functional programming(関数型プログラミング)」について、あるコンピューターサイエンスの学者が6歳の息子とゲーム形式で会話したことをブログでつづっています。6歳の子どもが興味を引き付けられた関数型プログラミングに関する会話は、子どものプログラミング教育のロールモデルを示唆するものになっています。 Conversations with a six-year-old on functional programming | blog :: Brent -> [String] https://byorgey.wordpress.com/2018/05/06/conversations-with-a-six-year-old-on-functional-pr
さて、比較的マニアックなC++の機能、というかライブラリの機能について書いてみようかと思う。 C++では関数型言語みたいな書き方ができるものがある。というヘッダを参照。 C++では100-3 は普通100-3 と書くが、次のようにも書ける。 std::minus<int>()(100, 3)std::minusというのは、「-」を表す operator()() がオーバーロードされているクラステンプレート。 std::minus() は、コンストラクタを呼び出してオブジェクトを作成したもの。 これを関数オブジェクトと呼ぶ。 operator()() がオーバーロードされていることによって、std::minus()(100, 3)のように、オブジェクトを関数のように扱える。 一つ目の()は関数オブジェクトの作成のためのコンストラクタ呼び出しで、二つ目の()が、オーバーロードされたoperat
■ [ruby][event] RubyKaigiで型推論の話をしました RubyKaigi2015でスピーカーとして登壇しました。 内容は「型推論入門」です。 https://speakerdeck.com/yhara/lets-make-a-functional-language https://github.com/yhara/rk2015orescript 「これってRubyに適用できないの」という質問をいただきましたが、RubyはHMとだいぶいろいろ違うので(オブジェクト・代入等)、難しいんじゃないかなという気がします。 いっぽうCrystalは型推論ができてるっぽいので、そっちのほうがRubyの参考にはなるかも?
var plus = function(a, b) { return a + b; }; var s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] .reduce(plus); console.log(s); が対比されています。 [0,1,2,...,9]はダサいか? 本書に対する感想として幾つか見かけたものに、「関数型コードの[0,1,2,...,9]という配列リテラルベタ書きの方が命令型コードよりダサいではないか!」というものがありました(0〜999まで足せと言われたらどうするつもりなのか!)。しかし、まさに0〜999まで足すにはどうしたらいいのだろう、という問いを本書の登場人物自身が問い(p. 45)、配列リテラルではなくrange関数を使って配列[0..999]を生成するコード例が示されます(p. 109)3。ですので、何度も繰り返されるコード例[0,1,2,
登場人物 セキヤ 高1男子。都内の進学校に通っている。 プログラミングが趣味でコンピュータ部に入部した。 サクラ 高2女子。IQ145の知能を持つ美少女。 セキヤの学校のコンピュータ部の先輩で、セキヤを厳しく指導する。 コンピュータ部では、いち早く頭角を現し、現在は高3部員を差し置いて部長として君臨する絶対的存在。 プログラミングスキルは『神の眼』と呼ばれる全能レベルにまで到達していると一部では噂されているが、サクラのコードを読み解けるだけのスキルをもつ人材が部内にいない為、今のところ真相は不明である。 出版にあたって ▼『関数型プログラミングに目覚めた!IQ145の女子高生の先輩から受けた特訓5日間』 という当ブログエントリのタイトルの書籍名で、秀和システムより筆者の著書が出版されます。 ▼発行日は、2015年5月1日ですが、実際にリアル書店の店頭に並ぶのは、4月23日(木)前後になるそ
ブロックなしRubyをやることでRubyを関数型言語、というかLispっぽくやっていくことについて考えてみます。なお筆者はLispあんまり詳しく無く、「リストに対する操作の適用をネストさせてなんかいい感じにするやつ」くらいの認識で言いました、ごめん。 ブロックなしRuby初級 xs = %w`akechi kokoro itoh chika ayase ena koshimizu sachiko` xs.map{|it|it.capitalize} #=> ["Akechi", "Kokoro", "Itoh", "Chika", "Ayase", "Ena", "Koshimizu", "Sachiko"]
追記 こんな記事を読むより、まともな関数型プログラミング言語を使ってまともに関数型プログラミングを学ぶほうが、関数型プログラミングについてよほど正確な理解を得られます。少しでも関数型プログラミングに興味のある人は、まずは真面目なHaskellの教科書やすごいH本を読んだり、やさしいHaskell入門を読んだりしながら、実際に関数型プログラミングのコードを書いてみることをお勧めします。 繰り返しますが、この記事はあんまり読む必要はないです。関数型プログラミングを理解するには実際に自分でコードを書いてみるのが一番です。関数型プログラミングあるいは関数型プログラミング言語を理解するもっとも確実な方法は、Haskellをあなたのマシンにインストールして何かまとまったアプリケーションを書いてみることです。Haskellでアプリケーションが書けたら、自分は関数型プログラミングを理解しているし使えると胸
演算子以外の構文記号の一部については,GHCの言語拡張UnicodeSyntaxを有効にするとソースコード中に記述可能です. 詳細については,GHCユーザーガイド 9.3.1 Unicode syntaxをご覧ください. 演算子に関しては,Unicodeの記号が使えますので,たとえば,1章については,以下のような定義モジュールをインポートすれば,そのままコードで表現できます. {-# LANGUAGE UnicodeSyntax #-} module Operators where import qualified Data.List infixr 5 \\ (\\) ∷ Eq a ⇒ [a] → [a] → [a] (\\) = (Data.List.\\) infix 4 ∈, ∉ (∈) ∷ Eq a ⇒ a → [a] → Bool (∈) = elem (∉) ∷ Eq a ⇒
是非手に取ってみて下さい.よろしくおねがいします. 関数プログラミング実践入門 ──簡潔で、正しいコードを書くために (WEB+DB PRESS plus) 作者: 大川徳之出版社/メーカー: 技術評論社発売日: 2014/11/14メディア: 単行本(ソフトカバー)この商品を含むブログ (1件) を見る AgdaとかHaskell Golfの本ではない.いいね? どのような本? これまで何らかの命令型言語に触れてきた人が「なにかと耳にするし,そろそろ関数プログラミングでも」と思いたったとき,その基本的な部分を押さえるための本です.関数型言語としてはHaskellをとりあげ,またHaskellを使っていくための説明を進めていきます.関数プログラミングからプログラミングに入る人はプログラミングに対する先入観が無いのでともかくとして,既に命令型言語の経験がある人の場合,関数プログラミングの考え
2月15日(木)に開催された「Developers Summit 2018(デブサミ)」(主催:翔泳社)にて「ITエンジニアに読んでほしい! 技術書・ビジネス書大賞2018」のプレゼン大会と投票が行われ、大関真之先生の著書『機械学習入門 ボルツマン機械学習から深層学習まで』がみごと技術書部門の大賞の栄冠に輝きました! プレゼン大会では大関先生自ら本書に関する熱い熱い思いを披露していただました。このプレゼンによって「読んでみたい!」「数式が苦手だけどこの本なら読める!」と惹きつけられるオーディエンスが続出!みごと大賞に選ばれることとなりました。ブラボー! 本書は、おとぎ話の白雪姫に登場するお妃様と鏡の関係をなぞらえ、その問答により「機械学習とは何か」「何ができるのか」を楽しいストーリーと可愛らしくしかも的確なイラスト、そして数式をまったく用いることなく解説している画期的な内容です。 登場する
やあ、3月に延期になったとはいえ、Java 8リリースが具体化してきましたね。 もうこれで、Lambdaがはずれるとかいうことはなさそうです。 ところで、Java 8で関数型っぽいことができるようになってうれしいのですが、ちょっと記述が冗長です。ということで、短く書けるおまじない考えてみました。 Function型 さて、まずはJava 8で標準で入ったFunction型をみてみましょう。パッケージ名まで含めるとjava.util.funciton.Functionです。 こんな感じで使います。 Function<String, String> enclose = s -> "[" + s + "]"; Genericsでの型指定の最初が引数、あとが戻り値の型です。ここではStringをとってStringを返す関数としてencloseを定義しています。 これを呼び出そうとすると、こんな感じ
LambdaDriver by yuroyoro Rubyで、Procやlambdaで関数合成できるようにしたかったので、lambda_driver.gemというのを作った。 内容的にはこの辺で書いたヤツをgemにした感じ。 「関数型Ruby」という病(2) - 関数合成 Proc#compose - ( ꒪⌓꒪) ゆるよろ日記 「関数型Ruby」という病(3) - カリー化(Proc#curry, Proc#flip) - ( ꒪⌓꒪) ゆるよろ日記 こんな風に、カッコよくコードが書ける。 require 'lambda_driver' # [:foo, :bar, :baz].map{|s| s.to_s }.map{|s| s.upcase } # [:foo, :bar, :baz].map(&:to_s).map(&:upcase) [:foo, :bar, :baz].map(
本記事は、Rubyを書くにあたって「いかにブロックを書かずにすませるか」を追求した、誰得な連載である。 「lambdaの暗黒面」に堕ちたプログラマが可読性とかメンテナンス性とか無視して好き放題コード書いたらこうなった。悪気はなかった。もしかしたら有益な情報が含まれている可能性もあるが、基本的には害悪しかないはずなので、話半分で読んで頂きたいΣ(||゚Д゚)モヒィィィィl 可変長引数に対するカリー化 前回、Proc#curryを利用して関数をカリー化する方法を示した。が、可変長引数をとる関数にはカリー化がうまく作用しない。引数を適用する個数を決めることができないからだ。 [1] pry(main)> f = "foo".method(:gsub).to_proc => #<Proc:0x007fe59112f588 (lambda)> [2] pry(main)> f.arity => -1
本記事は、Rubyを書くにあたって「いかにブロックを書かずにすませるか」を追求した、誰得な連載である。 プログラマ厨二病をこじらせるとこんなヒドいことになるという実例を示すものであって、可読性やメンテナンス性についてのツッコミはご遠慮願いたい。が、こういうコードを書いても怒られない世界がくればいいと思うのでみんな関数型言語やればいい( ;゚皿゚)ノシΣ フィンギィィーーッ!!!。 カリー化とは 複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること。 http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96 つまり、多引数の関数を、「1引数の関数を返す関数」に変換することである。 以下の例にある3引数の関数fをカリー化したものは、関
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く