タグ

Haskellに関するagwのブックマーク (44)

  • 関数合成の妙技 - あどけない話

    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

    関数合成の妙技 - あどけない話
    agw
    agw 2022/10/18
  • [入門]関数プログラミング―質の高いコードをすばやく直感的に書ける! 記事一覧 | gihyo.jp

    運営元のロゴ Copyright © 2007-2024 All Rights Reserved by Gijutsu-Hyoron Co., Ltd. ページ内容の全部あるいは一部を無断で利用することを禁止します⁠。個別にライセンスが設定されている記事等はそのライセンスに従います。

    [入門]関数プログラミング―質の高いコードをすばやく直感的に書ける! 記事一覧 | gihyo.jp
  • 木(tree)で遊ぶ - 連載 Haskellプログラミング(『情報処理』46巻5号 2005年5月)

    46 5 2005 5 564 n 1 4 4 -1 5 n data data DumbTree = Empty | Fork DumbTree DumbTree data DumbTree Empty ( ) 2 DumbTree Fork nobsun@sampou.org IPSJ Magazine Vol.46 No.5 May 2005 565 DumbTree ( ) Empty Fork ( ) -- trees (>0)DumbTree trees :: Int -> [DumbTree] trees 1 = [Empty] trees n = concat [ joins ls rs | (ls,rs) <- [ lrs xs ys | (xs,ys) <- splits1 n ]] -- splits1 (>0)(>0)2 splits1 :: Int -> [(In

  • エラー処理を書いてはいけない

    エラー処理を書いてはいけない田中英行 tanaka.hideyuki@gmail.com 2011/12/08 @PFIセミナー 自己紹介田中英行 (@tanakh, http://tanakh.jp) PFI社でプログラマやってますJubatuspficommon検索エンジンのコアエンジンHaskell愛好家msgpack / rpc / idlpeggy (パーザジェネレータ & QQ w/ AQ)Shu-thing (シューティングゲーム) / (Monadius メンテナ)今気になるパッケージは monad-controlLearn you a Haskell 鋭意翻訳中 (春頃発売予定) エラー処理を書いてはいけない日の概要エラー処理を抽象化しようというお話です 現在のエラー処理の抱える問題どのように解決するのか実際の例エラーは処理しなければならない エラー処理を書いてはいけな

  • 遅延評価を活用して線形時間でGoogle Code Jam 2014 Round 1AのB問題を解く - tosの日記

    公式の解説で,「遅延評価を使ってもできる」と書いてくれなかったので。 注意:この記事は,Google Code Jam 2014 Round 1AのB問題 Full Binary Tree についてのネタバレを含みます。 この問題は木DPをする典型的な問題であり,公式の解説にもあるように, 木を根付き木にした後, 頂点でのスコアを,子のスコアのうち大きい方から2つを用いて計算する ことで解けます。何を根として選ぶかをすべて試すとO(N2)解法となり,すべての根の可能性について同時にDPをする*1とO(N)解法になります。だから,根の選び方によって隣接頂点のうち「親以外が子となる」ので,隣接頂点のスコアのうち大きい方から3つを保存するような構造を持つ――待ってください。 もちろん,降順ソートされたスコアのすべてを計算すると,O(N2)時間かかってしまいます。しかし,先頭3つを結果的に計算でき

    遅延評価を活用して線形時間でGoogle Code Jam 2014 Round 1AのB問題を解く - tosの日記
  • foldlを直す - 純粋関数空間

    http://www.well-typed.com/blog/90/ foldlに関するこの記事(英文)が面白かったので、勝手翻訳しました。 foldlなんとかなるといいですね。 foldlを直す foldl 関数は壊れている。壊れているとみんなが知っている。 四半世紀近く壊れたままだ。ついにこれを修正する時が来た! 今日、私はPrelude.foldlをData.List.foldl'として知られる実装で再定義することを提案する。 foldlは壊れている! 既にご存知だとは思うが、念のため… Haskellerが必ずfoldlではなく、foldrやfoldl'を使うように勧めてくることにお気づきだろうか? 例えばReal World Haskellでは次のように言っている。 `foldl`のサンクの挙動のため、実アプリではこの関数を使わないようにするのが望ましい。 特に問題がない場合でも

  • BazQux Reader

    One place to fol­low every­thing Fol­low the news from your fa­vorite sites in one place. Sub­scribe to sites in­stead of vis­it­ing them. Read with­out ads and track­ing. Read Face­book, Telegram and VK Mon­i­tor so­cial me­dia pages to­gether with web­sites. Just en­ter the page URL and fol­low it like a reg­u­lar blog. Full-text ar­ti­cles Read the full con­tent of trun­cated ar­ti­cles or so­c

    BazQux Reader
  • 手続き脳によるHaskell -- Sorting Algorithms

    このページは手続き脳から脱却でいない筆者が、Haskell による各種 ソートティングアルゴリズムを実装してみた結果を紹介するページです。ソート はアルゴリズムの基ですから、これで Haskell を攻略しようというわけ です。 ところで、Haskell に関するWebページを巡回していると、高階関数やモナド などを複雑に使ったアクロバチックでアブノーマルなコードに出会うことが しばしばあります。書いている超頭の良い人達は自らの変態さ加減が披露出来て 快感なのかもしれませんが、頭の悪い私にはそんなコードは理解できません... orz。 そこで私のページでは次のスローガンでプログラミングを行います 普通にやれ、普通に! そんなわけで「モナドを理解したい」とか常人には不可能な無理難題を期待 している人は他のページを当たってください。筆者自身が分かってないので解説 できません。ごめんなさい。

  • 疑似乱数に状態なんていらない - あどけない話

    State モナドと疑似乱数で書いたように、遅延評価が利用できる言語では、無限数列が扱えるので、疑似乱数を使う際に状態を持たなくてもよい。その一例として、モンテカルロ法による円周率の近似を挙げてみる。 XY 平面に単位円を考える。 radius :: Double radius = 1.0この円がぴったり収まる大きさ1の正方形を描く。ここで、第一象限のみを考える。正方形のうち、第一象限にある部分の面積は、1/4。第一象限にある円の面積は、全体の 1/4 だから π/4。 モンテカルロ法では、第一象限の正方形の中に、ランダムに点(x,y)を打つ。たくさんのランダムな点を、疑似乱数から生成しよう。そのとき、状態を持つのではなく、乱数の無限数列を生成する。 import Random randomSeq :: Int -> [Double] randomSeq seed = randomRs (

    疑似乱数に状態なんていらない - あどけない話
  • 右も左も分かる再帰 - あどけない話

    「函数プログラミングの集い」のチュートリアル資料を作成するためのメモ。リストに対する再帰を2つに分類することで理解する。 再帰 関数プログラミングでは、繰り返しを再帰で実現する。入力がリストである関数を実装するとする。この種の関数は、出力の種類により以下の2つに分類できる。 同じ順番のリストを作る 数値などを作る。あるいは逆順のリストを作る。 リストからリストを作る再帰 例として、(++)、concat、map、filter の利用例と実装を示す。 (++) (++) は連結(append)関数。 [1,2] ++ [3,4,5] → [1,2,3,4,5] 実装はこう。 (++) :: [a] -> [a] -> [a] (++) [] ys = ys (++) (x:xs) ys = x : (xs ++ ys) concat concat は、リストのリストをリストに平坦化する。 c

    右も左も分かる再帰 - あどけない話
  • カリー化談義 - あどけない話

    最近、スタートHaskellで「カリー化された関数のメリットは何か?」という質問が出た。そのすぐ後に、kmizuさんがカリー化の誤用に対して警鐘を鳴らしてしていた。僕からするとkmizuさんの「カリー化の定義」も誤用に思えたので、調べるとともに考えたことのまとめ。 いろんな定義 「カリー化する」という用語は、すくなくとも以下の3つの意味で使われているようだ。 部分適用という意味 これは明らかに間違い 「複数の引数を取る関数」を「一引数を取る関数のチェインに直す」こと これはkmizuさんの定義。世間でもよく使われる。 「構造体を一つ取る関数」を「構造体のメンバーを複数の引数にばらし、一引数を取る関数のチェインに直す」こと これは僕の定義。というか、Haskellコミュニティの定義。 「部分適用」の意味で使うのは明らかに間違いのなで排除。定義2と3について議論する。あとで、部分適用とは何かに

    カリー化談義 - あどけない話
    agw
    agw 2011/09/06
    大変分かりやすい。
  • プログラミングのための確率統計 in Haskell

    こんな表のことを確率分布といいます。サイコロをふったときに起こるイベントの確率、たとえば「偶数の目が出る」確率を調べることは、この確率分布からこんな別の確率分布への変換だと考えられます。 この変換は、具体的にはこんな対応です。P(偶数) = P(2) + P(4) + P(6) P(奇数) = P(1) + P(3) + P(5)P(X)がイベントXに対する確率を表しているわけですが、Pを「イベントの集合から[0,1]区間の実数への関数」だとみなすこともできます。確率分布から確率分布への変換は、関数に対する演算でもあるわけです。確率分布を連想リストで表せば、高階関数や代数型を使って、この変換をモデル化できそうです。 以前、このアイデアをSchemeで試してみたことがありました。当時は、そもそも確率についての理解が今よりもいっそうあやしかったし、実装もちゃちでしたが、このアイデアが特別なもの

  • Snow Leopardでghcを使う - 素人がプログラミングを勉強していたブログ

    現時点ではMacPorts上のghcはsudo port install ghcでは入らない。 Snow Leopardで動くghcは、GHC: Download version 6.10.4だ。 ただし、ghciやrunghcは動くがghcでのコンパイルは失敗するので、MacPortsのghcが動くようになったら、sudo /Library/Frameworks/GHC.framework/Tools/Uninstallerを実行してオフィシャルパッケージのghcをアンインストールすべきだ。 Snow Leopardとghcに関する問題のチケットは #20132 (ghc missing variable definitions in 10.6) – MacPorts #3400 (OS X: ghc broken on Snow Leopard) – GHC を追えば良い。 SnowL

    Snow Leopardでghcを使う - 素人がプログラミングを勉強していたブログ
  • OpenGL - あどけない話

    Haskell の OpenGL ライブラリが新しくなり、副作用として Mac で動かないようになっていた問題は、9月13日の更新で解決されたみたいだ。ようやく、Mac で OpenGL が復活した。 しかし、昔作った GLUT を使うプログラムがコンパイルできなくなっていた。どうも、OpenGL ライブラリの型がかなり厳しくなったらしい。しょうがないので、一つ一つ関数の仕様を調べて、対応した。

    OpenGL - あどけない話
  • Haskell本の翻訳書 - あどけない話

    Haskellの翻訳が2冊、発売されます。 Real World Haskell オライリーの「Real World Haskell」が、同じ名前の「Real World Haskell」で、10月24日に発売される予定です。 分厚いをよく訳したものだと感心します。訳を担当した山下さん、伊東さん、お疲れさまでした。 Programming in Haskell 「Programming in Haskell」の翻訳が「プログラミング Haskell」という書名でオーム社から発売されます。11月初旬を予定しています。訳したのは僕です。薄いなので助かりました。:-) レビューして下さった方々に感謝します。

    Haskell本の翻訳書 - あどけない話
  • プログラミングHaskellはいいね - takkan_mのNo planな日常

    関数型パーサーの章にたどりついたんだけど、これはいいとおもった。今Haskellの概念を学びたいという人には、間違いなくこのを推す。 何がいいかというとモナドという言葉がほとんどでてきません。他のはモナドが特徴だみたいなかんじになって、モナドとはみたいな書き方なわけですが、書の場合はこういうときはこう書いたほうがいいよね的な書き方があった後に、実はこれモナドっていうんだよみたいな書き方。これはいいと思った。 というわけで、Haskellのが最近沢山でているけど、何を買ったらわからんという人は、このをまず買うといいと思います。ただ、プログラムの記法というか記号が数学記号なので付録の対応表をみないときついですが。 プログラミングHaskell 作者: Graham Hutton,山和彦出版社/メーカー: オーム社発売日: 2009/11/11メディア: 単行(ソフトカバー)購入:

    プログラミングHaskellはいいね - takkan_mのNo planな日常
  • プログラミングHaskell は 超お薦め! - yuumi3のお仕事日記

    このは、Haskell の入門書として、超お薦めです。 「木を見て森を見ず」という言葉がありますが、従来のHaskell入門書というか、言語の入門書は 「木」の解説ばかりで、「森」を見失っていたのではないかと思います。 今まで何冊ものHaskell入門書を読みながらモヤモヤとした気分のままだった私も Haskellに 一歩近づけた気がします。 プログラミングHaskell 作者: Graham Hutton,山和彦出版社/メーカー: オーム社発売日: 2009/11/11メディア: 単行(ソフトカバー)購入: 14人 クリック: 503回この商品を含むブログ (117件) を見る Haskell は 参照等価、遅延評価、パターンマッチ、モナド・・・ など、C、JavaRuby ... とは大きく異なるプログラミング言語です。 Javaを理解している人がRuby を学ぶ際には 「木」

    プログラミングHaskell は 超お薦め! - yuumi3のお仕事日記
  • 珠玉のリスト・プログラミング - あどけない話

    僕は Haskell を知るまで、再帰に関しては、もう学ぶべきことはないと思っていました。しかし、繰り返しさえ再帰で実現しなければならない純粋関数型言語に触れてはじめて、再帰の深淵を見た気分になりました。 以下、Programming in Haskell から 3 つ問題を出します。あなたには、実装できるでしょうか? 問題 以下の関数を実装しなさい。 与えられたリストのすべての部分リストを生成する関数 subs 第一引数を第二引数のリストへ挿入したすべてのリストを生成する関数 interleave 与えられたリストの順列を生成する関数 perms 言葉だけではよく分らないと思いますので、実行例を示します。 subs [1,2,3] → [[],[3],[2],[2,3],[1],[1,3],[1,2],[1,2,3]] interleave 1 [2,3,4] → [[1,2,3,4],

    珠玉のリスト・プログラミング - あどけない話
  • プログラミングHaskell - あどけない話

    日刷り上がって参りました。発売は11月11日です。オーム社の方曰く「ソフトカバーなのに、ハードカバーのように平たく開ける特殊な製」だそうです。 Haskellナイトでも販売するようです。では、Haskellナイトでお会いしましょう。 プログラミングHaskell 作者: Graham Hutton,山和彦出版社/メーカー: オーム社発売日: 2009/11/11メディア: 単行(ソフトカバー)購入: 14人 クリック: 503回この商品を含むブログ (117件) を見る

    プログラミングHaskell - あどけない話
  • 最高のHaskell入門書 - あどけない話

    輪講で「Programming in Haskell」をようやく読み終えました。このは、最高のHaskell入門書といって間違いないでしょう。 Programming in Haskell 作者: Professor Graham Hutton出版社/メーカー: Cambridge University Press発売日: 2007/01/18メディア: ペーパーバック購入: 2人 クリック: 67回この商品を含むブログ (22件) を見る 一緒に Haskell のを何か読もうという話が、友達との間で出たとき、最初は「The Craft of Functional Programming」にしようかと思っていました。ただ、出版社の人から「Programming in Haskell」を勧められたことがあったので、二冊を友達に提示したところ、直感で「Programming in Has

    最高のHaskell入門書 - あどけない話