デモ中心だったのであっけないスライドです。 書いたコードはこちら。https://github.com/shokos/Haskell_test_tutRead less
デモ中心だったのであっけないスライドです。 書いたコードはこちら。https://github.com/shokos/Haskell_test_tutRead less
1 Haskell Behavior Driven Development 2012.5.27 @kazu_yamamoto 2 Haskell 4 Mew Firemacs Mighty ghc-mod 3 Ruby/Java HackageDB 4 Haskeller 5 Haskeller 6 Q) Haskeller A) 7 8 Haskeller Haskell 9 10 11 Haskell 12 Haskell Haskell 13 14 Haskell 15 Haskell 16 Haskell 17 \^^/ 18 19 20 Haskeller HUnit QuickCheck 21 QuickCheck prop_doubleSort :: [Int] -> Bool prop_doubleSort xs = sort xs == sort (sort xs) >
きっかけ http://d.hatena.ne.jp/itchyny/20120304 この記事を見て、私も昔円周率を計算したことがあるのを思い出しました。 http://d.hatena.ne.jp/tanakh/20070506#p1 公式は同じくチュドノフスキーを使用、GHCのIntegerをそのまま用いて円周率を計算、 当時(5年前)のマシン(おそらくCore2あたり)で1億桁が15分ほどだったようです。 SPOJというサイトのコンテスト向けに、 $\sqrt{2}$ 200万桁計算の高速化 をCで書くとこから始めて、 ナイーブ乗算、カラツバ法、そしてFFT乗算の実装にいたり、円周率へ。 最初AGMを実装し、 古くて新しい方法、Arctan系の公式の実装を経て Binary Splitting Methodを知り、 チュドノフスキーの公式へ至りました。 さらにHaskellでの実装
こんにちわ。今日は、関数適用の話をします。 前回のエントリで、「メソッドチェーンと違いがよくわからない」という指摘をもらったり、なんかスゴイSmalltakerから黒魔術を駆使したトラックバックをもらったりしたので、もう少し前回のエントリの意図するところを掘り下げたい、と思います。 ちなみに、このシリーズは、自分が学習して考えた結果をまとめたもので、タイトルにある「オブジェクト指向プログラマ」というのは俺自信のことです(キリッ ごめんなさい。 前回まで 前回は、このような入れ子になった関数呼び出しを、 // かっこがいっぱい……。 putStr(unlines(sort(lines(in)))) 関数合成を駆使して、このように変換するところまで説明しました。 putStr << unlines << sort << lines <*> in オブジェクトが無い世界 本題に入る前に、「オブジ
追記: この記事書いたあとのtwitter上での反応 ScalazとHaskellの比較記事というか疑問点をいっぱい書いたら、shelarcyさんにいっぱい教えておもらったよ! Scalaz7 では色々改善されている部分もあるけれど、まだ作りかけなので、とりあえずScalaz6.0.4で。自分のHaskellの知識が浅く、間違ってること言っている可能性大なので、なにかあればどんどん突っ込んでくださいm(_ _)m まず対応していそうなものをとにかく書きだしてみた ← 名前同じで、ほぼ同じ役割をしていると思われるもの。結構ある 無名関数の引数がカリー化されないので、Scalazのほうには、Haskellには存在しないApplicativeBuilderというものがある Scalazの場合Bifunctorというものがあるが、Haskellにbifunctorという単語がでてこない ほかにも、
scala, haskell, 関数型言語 | 14:47 | こんにちわ。今日は、関数合成の話をします。 標準入力から何行か読み込んで、ソートして返す以下のような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") // 文字列を表示
「モナドは自己関手圏のモノイド対象にすぎない」とワドラーはいったがその事を説明したいと思います。 次のものを説明します。 対象 射 結合則 恒等射 圏 関手 自然変換 圏の基礎 圏は以下のものから構成されます 射 対象 射はソースとターゲットを結ぶ矢印とされます XがソースYがターゲットの社は次の通りに記述されます。 射の結合 の二つの射が存在した場合結合する事ができます さらに以下の公理を満たす必要があります。 恒等射 結合則 恒等射 任意の対象Xに対して射 が存在し恒等射という、さらに任意の射に対して が成り立つ。 結合則 が成り立ちこれを結合則という。 関手 圏Cと圏Gが存在したとして、 CからGに対して 対象 射 を対応させるものである。この時関手は以下の性質を保っていなけばならない。 恒等射 射の合成 自然変換 圏Cと圏Dの間に、F、Gという関手が存在し、 FからGへ移す射 が存
CabalでHackageにパッケージを上げたのでやり方をまとめておきます。 0.Hackageのアカウントを用意する Hackageはダウンロードなら誰にでも出来るようになっていますが、アップロードするにはアカウントが必要になります。説明を読んで、ross@soi.city.ac.ukに(英語で)ユーザ名と初期パスワードをもらいましょう。 1.cabalファイルとSetup.hsの生成 次に、cabalコマンドを使って必要なファイルを.tar.gz形式のパッケージにまとめます。まずはアップロードしたいプロジェクトのディレクトリ内で $ cabal init をすると、パッケージ名や作者名を対話的に設定してくれます。この設定ファイルはプロジェクト名.cabalという名前で保存されますが、同時にSetup.hsというHaskellコードも生成されます。これはプロジェクトをビルドするために使う
型推論による静的な型付け、純粋な参照透明性を特徴とする関数型言語 リソース リファレンス The Haskell Home Page [en] Haskell Wiki [en] Programming in Haskell [ja] 処理系 Haskell Compilers and Interpreters [en] Hugs [en] GHC [en] nhc98 [en] Helium [en] Implementing functional languages: a tutorial チュートリアル やさしい Haskell 入門 [ja] Yet Another Haskell Tutorial [en] プログラム工学VI 授業関連資料 [ja] <- こっちの方がやさしい Haskeller への道 [ja] モナド All About Monads [en] <- 決定版
5. 入出力 Haskell は純粋な関数型言語なので入出力のような副作用のある 操作は少しめんどくさくなります。 しかし、このことによって、副作用のある部分を副作用の無い関数から 隔離することが出来ます。 1. do 記法 do ブロックの中の式は順番に実行されます。 IO は、入力 → 計算 → 出力 の順番で実行する 必要があるので do 記法を用いて記述します。 do 記法の代わりに >>= を使うことも出来ます。 この方法は Monad のところで説明します。 do ブロックは通常の関数と異なるのでアクションと呼ばれます。 do ブロックから外部に値を返すには return を用います。 return a とすると外部には IO a が返ります。 (正確な説明は Monad のところでします。) ファイル読み込みなどの入力アクションが返す値は IO a と呼ばれ、 普通の a と
ここ→配列操作の比較表に触発されて、Rubyの文字列メソッドの対応物をJavaとHaskellで探してみました。 Javaの文字列処理がそれほど高機能じゃないのはある程度想定内だったけど、Haskellもなかなか1対1の対応物がない。 lines,unlinesとか逆にあまったけど。 そもそもHaskellのソレって文字列処理用っていうよりほとんど汎用リスト操作関数なわけで。 Haskellって 「汎用性の高い関数を用意したから自由に組み合わせて使ってね」 って思想だと思うわけで。 カリー化された関数の強力な応用力とあいまってこれはこれで一つの便利さの方向性だとはおもう。 ただこれの欠点は 「もっとエレガントで短い書き方があるんじゃないか?」 って不安がいつまでも付きまとう事。 (しかもタチの悪い事にパズルみたいで楽しすぎる!) 自分の修行が足りなくてイディオムを知らないせいもあるけどね。
John Hughes, Institutionen för Datavetenskap, Chalmers Tekniska Högskola, 41296 Göteborg, SWEDEN. rjmh@cs.chalmers.se この日本語訳は原著者の承諾を得て山下がここに公開するものです。 この訳文についての、御指摘などは山下伸夫(nobsun .at. sampou.org)までおねがい いたします。 翻訳最終更新日 : 2011-09-17 原文 "Why Functional Programming Matters" 日本語訳PostScript この論文は1984年以来何年ものあいだChalmers大学のメモとして回覧された。 1989年と1990年に幾分か改訂をしたのが[Hug89]と [Hug90]である。この版はもとのChalmer大学のメモ のnroff原稿をもとに
Name Last modified Size Description Parent Directory - 0.29/ 12-Feb-1999 13:57 - 2.10/ 12-Feb-1999 13:57 - 3.00/ 12-Feb-1999 13:58 - 3.01/ 12-Feb-1999 13:58 - 3.02/ 12-Feb-1999 13:58 - 4.00/ 12-Feb-1999 13:58 - 4.01/ 12-Feb-1999 13:58 - 4.02/ 12-Feb-1999 13:58 - 4.04/ 05-Oct-1999 10:25 - 4.04pl1/ 12-Feb-1999 13:58 - 4.06/ 26-Jan-2000 11:10 - 4.08.1/ 09-Oct-2000 09:11 - 4.08.2/ 22-Feb-2001 11:32 -
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く