Help us understand the problem. What is going on with this article?
この記事はHaskell Advent Calendar 2017に投稿したものです. 関数プログラミングでは,ツリー構造はさまざまなデータの集まりを表現するのに便利なデータ構造です. 単純でよいなら,Haskell(GHC)ではcontainersパッケージにある,Data.Treeモジュールを使ってTree型で表現するのが楽です. import Data.Tree data Lab = A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z deriving (Eq,Ord,Enum,Bounded,Show,Read) sample :: Tree Lab sample = Node A [Node B [Node C [Node D [
2017/10/03 (この記事は『Haskell入門 関数型プログラミング言語の基礎と実践』の書評もとい宣伝です) Haskell は研究者から開発者まで様々な人が関わり発展している言語です。純粋なエンジニアがHaskellを学び始めるとファンクタやモナドなど数学由来の概念に惑わされ、まともなアプリケーションを開発できるスキルを身につけるところまでたどり着かないというのはよくある話だと思います。これらの概念は決していたずらにHaskellを難しいものにしているわけではなく、むしろ他の言語にはない素晴らしい機能を提供してくれるものです。しかし学習の段階ではどこまで学ぶべきか折り合いをつけるのが難しく入門の敷居を高くしてしまっているのも事実です。 技術評論社より新しく出版された『Haskell入門 関数型プログラミング言語の基礎と実践』は「まったくの初心者がHaskellでアプリケーションを
プログラマ35歳限界説!?プログラマ35歳限界説には2つの解釈がある。 1つ目は、IT業界自体が人間の能力には何も期待しておらず、単なる体力勝負であるから、体力が落ちてきて無駄に給与が高くなった35歳で廃用という意味。 2つ目は、本当に頭が働くのは35歳までで、そこを過ぎたあとは、真の知能職であるプログラマをすることは難しいという意味。私が興味あるのはこちら。そして本記事のスコープもこちら。 数学の世界では30歳で限界数学の世界では20台のうちに大きな成果を出さないと終わりだと言われる。人間にとって究極の知能職だからだろう。囲碁や将棋では、本当にトップレベルの実力が出せるのはやはりせいぜい35歳くらいまでで、それからは徐々に落ち目になる。 しかし囲碁将棋の世界では歳老いて強い人がいる囲碁や将棋のプロを見ているとしかし、40を過ぎてからも50になってからも強い人が時々いる。羽生善治の著書をい
私が関数型プログラミングについて度々耳にするようになったのは、数カ月前からです。でも当時は、それが何なのか見当もつかず、単なるバズワードだと思っていました。皆さんの中にも、そのような方は多いでしょう。それ以来、私は関数型プログラミングについて深く学び、この言葉を日々聞いてはいるものの内容を理解していない初心者の方のために、分かりやすく説明しようと思い立ちました。 関数型プログラミング言語の話になると、「 Haskell と Lisp は どちらが優れているのか 」という 議論 が 白熱する 傾向にあります。HaskellとLispはどちらも関数型言語ですが、実際には大きな違いがあって、それぞれに長所と短所があります。その具体的な内容については、この記事を読み終える頃には深く理解していただけると思います。この2つの言語には、それぞれから派生した言語があります。その中で恐らく皆さんが耳にしたこ
Haskell分からない人が贈るHaskell入門 高階関数におけるRubyのブロックとHaskellの関数の違いに関してかなり雑でしたので、 "Rubyistに贈るHaskell入門"がちょっと微妙だったので補足記事その1 こちらの補足記事を併せて読むことをオススメします。 Rubyと一緒なら怖くない! Haskellは関数型言語です。 「関数型」、この単語を聞いた時点で回れ右してオブジェクトの世界に向かって全力疾走したくなりますが、Rubyは関数型言語にも影響を受けている言語です。 ならばRubyで関数型の概念を理解することができるかもしれない! 関数型の特徴 関数型にはいくつかの特徴がありますが、今回は以下の特徴をRubyによって説明します。 高階関数 カリー化 関数の部分適用 関数合成 これらの雰囲気をRubyでつかみ、Haskellへの第一歩としましょう。 高階関数 おめでとうご
2. テーマについて 勉強会をやるらしい → 各 λ 人の好きな題材でいいらしい。 → じゃあ Haskell で何か話そう。 → でもすごい H 本出たし基本的なことはもう話題と して出尽してるよな…… → あれ?この本配列について書いてなくね? → λ < Haskell の配列も楽しく学ぼう! 3. Haskell とは! なんてことを話している時間はない。 とりあえず今後の話に関わることとしてこれぐらい。 型に厳しい(強い静的型付けである) キャストとかゆとりな事はしない 型が合ってないと絶対許してくれない 参照透明性が(基本的には)成り立つ IO ・破壊的変更の扱いがめんどい特殊 unsafe ほげほげの話はしない 「型クラス」がある 「型クラス」は共通の性質を持った型の集まり ある型クラスに関して polymorphic な関数とか書
このページは手続き脳から脱却でいない筆者が、Haskell による各種 ソートティングアルゴリズムを実装してみた結果を紹介するページです。ソート はアルゴリズムの基本ですから、これで Haskell を攻略しようというわけ です。 ところで、Haskell に関するWebページを巡回していると、高階関数やモナド などを複雑に使ったアクロバチックでアブノーマルなコードに出会うことが しばしばあります。書いている超頭の良い人達は自らの変態さ加減が披露出来て 快感なのかもしれませんが、頭の悪い私にはそんなコードは理解できません... orz。 そこで私のページでは次のスローガンでプログラミングを行います 普通にやれ、普通に! そんなわけで「モナドを理解したい」とか常人には不可能な無理難題を期待 している人は他のページを当たってください。筆者自身が分かってないので解説 できません。ごめんなさい。
あけましておめでとうございます。本年もよろしくお願いいたします。 唐突ですが、Haskellを少しやってみたので、その感想を書いてみます。 僕は正月休みにHaskellでProject Eulerに挑戦していました。これは、数学っぽい問題をプログラムを書いて解いていくサイトです。数学は再帰的な定義が多いため関数型言語が向いているだろうと考え、ほぼ未経験のHaskellを試してみました。 解けそうな問題から50問解いてみましたが、随分スラスラ書けるようになってきた気がします。また、書いていると不思議と気持ちがいい言語だという印象を受けました。気持ちよさは複合的なものだと思いますが、その要因になっていそうな特徴を紹介してみます。 数学や英語の知識で「読める」表現が多い いきなり印象論なんですが、Haskellのコードは初見でもそこそこ読める気がします。中の人が読みやすさを大事にしているためだろ
こんにちわ。今日は、関数合成の話をします。 標準入力から何行か読み込んで、ソートして返す以下のようなScalaのコードを例にします。 例なので、あえて冗長なコードを書いてます。 このコードでは、4つの関数が用意されています(unlines/putstr/sort/lines)。 この4つの関数を組み合わせて、読み込んだ文字列を行に分解して、ソートして、 また改行コードをつけて文字列にもどして表示、ということをやっています。 object Main extends App { val in = scala.io.Source.stdin.getLines.mkString("\n") // 改行をつけて結合する関数 val unlines = (s:Seq[String]) => s.mkString("\n") // 文字列を表示する関数 val putStr = (s:String) =
適切な一歩を踏み出すか否かは、大きな違いを生みます。この記事では、2011年に Haskell を始める人のために、著者が考える最適な入門方法を示します。 Haskell Platform をインストールする 昔人気のあった Hugs は、もう保守されていません。現在は、GHC の時代です。GHC とライブラリをパッケージ化した Haskell Platform をインストールして下さい。 インタープリタが使いたい場合は、付いてくる ghci を使います。 コンパイラ -- ghc インタプリタ -- ghci スクリプト -- runghc GHC マニュアルの日本語訳もあります。 プログラミングHaskell 次に、プログラミングHaskellを読んで関数プログラミングの「こころ」を理解しましょう。 プログラミングHaskell 作者: Graham Hutton,山本和彦出版社/メー
プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20) C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13) C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る VBAにおけるFileDial
Haskell 初心者は括弧ばかりの Lisp のようなコードを書く。中級者になると、($) が多くなる。上級者(言い過ぎか?)になると、($) が消えて、(.) が多くなる。この記事では、上級者になるコツをちょっと教えちゃおう。 括弧だらけのコード では、以下の例について考えよう。 foo p xs = sum (filter p (map (+1) xs)) 括弧が多くて、いかにも初心者が書いたコードだ。foo は、以下のように動く。 foo even [1..6] → 12 ($) を使う では、括弧を ($) に置き換えてみよう。そうするには、一番右側にある閉じ括弧を消して、対応する開き括弧を ($) に置き換えればよい。だからこうなる。 foo p xs = sum $ filter p $ map (+1) xs だいぶ見やすくなった。 (.) を使う map (+1) xs
あなたの思考が穴だらけだからである。 その穴だらけの思考を具現化して何になるというのだ。 遊びならいいが仕事では駄目だ。デバッグに手間がかかりすぎる。 では何故Haskellか? Haskellは包括的な記述をあなたに要請するからである。 以下はHaskellのif式だ。式なのでそれ自身値を持つ。 if n > 3 then "n is bigger than 3" else "otherwise" Haskellでのif式ではelse以降を省略することが出来ない。 使いづらいと思うだろうか。しかしifをネストし、else以降を書かなかった部分があったために致命的なバグを生んでしまったことはないだろうか。そのバグは見つけづらい。それはそうだ。コンパイルでは見つからず、あなたの思考には穴があるために何度読んでも正しいとしか思えないからだ。 賢明であれば、その前後で使用している変数の値を追いか
僕は今、プログラマーとしての幸福感に満たされている。遅延評価を習得できたと思えるからだ。 遅延評価 なぜ関数プログラミングは重要かには、遅延評価の利点を以下のように説明している。 停止条件はループの本体とは切離すことができ、強力なモジュール化が可能となる。 例として載っている「ニュートン-ラプソン法による平方根」は、若干難しいので、簡単な別例を示そう。Haskell には、第一引数の数だけ、第二引数を繰り返す関数 replicate がある。 > replicate 3 'a' → "aaa" これを普通に実装するとこうなる。 replicate 0 c = [] replicate n c = c : replicate (n-1) c Haskell 以外で実装する場合、きっとループを使うだろう。ただ、ここでは再帰かループかは問題ではない。 問題は、「結果を作る仕事」と「終了条件を判断
第1回 Haskellプログラミングの楽しみ方 山下 伸夫 株式会社タイムインターメディア 2008/10/29 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう(編集部) 本連載は、Haskellプログラミングの初歩から始めて、日常的なスクリプティングやWebプログラミングをHaskellで楽しめるようになるまでのガイドである。 Haskellプログラミングのスタイル Haskellプログラミングに興味はある人でも、Haskellプログラミングの習得にはちょっとした障壁を感じることがあるのは間違いないようだ。小難しい概念や用語のせいでもあるが、それらはあまり重大な理由ではない。 障壁となるのはHaskellのプログラミングスタイルである。Haskellのプログラミングスタイルは関数プログラミングという系統に属する。一方、
筆者 shelarcy Haskellは,関数型プログラミングというジャンルに属する言語です。Haskellや関数型プログラミングを題材に物事を見ていくことで,今まで思いもよらなかったような未知の世界を知ることができるでしょう。 プログラミング言語を学ぶという行為には, 言語の基本的な文法や考え方を理解する 言語の文化圏で広く使われている考え方に親しんでその言語らしい書き方を習得する 単に言語を使ってできること以上の知恵を学ぶ の3段階があります。この連載では,三つ目の段階を目標に,Haskellプログラミングの世界を一つひとつ丁寧に紹介していきます。 更新は毎月第1水曜日(1月のみ第2水曜日)
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く