2011-10-01から1ヶ月間の記事一覧

IOモナドとdo記法

まずはじめに、HaskellでのHelloWorld。 module Main where main :: IO () main = print "Hello,World!"この"()"というのが気になったのですが、どうやらちゃんとPrelude(?)で定義されているようです。 Prelude> :i () data () = () -- Defined in GHC.Un…

モナドの入り口に立つ

Haskellを本格的に勉強しはじめて20日と少し経ち、関数型言語のイメージのようなものは大体つかめて来たと思うので、Haskellerの間で「難関」と言われている「モナド」に挑戦します。IOや、List、Maybeがモナドだ、というのはいやというほど聞かされていた…

Haskellでスタックを実装する

以前から、Haskellには副作用が無いので、スタックの実装をするにはどうすれば良いのか、という事を色々思いめぐらせたりしていたのですが、悩んでても仕方がないので調べてみたら、思いの外単純でした。大抵のサンプルでは、ちゃんと型を指定していたりする…

Dartの静的型付け

と、見出しで銘打っておいてなんですが、Dartは動的な型付けを行っています。 これは、「多くの開発者に支持されているJavaScriptの性質を維持する」というDartのコンセプトで考えれば、自然な事だと言えます。とはいえ、動的な片付けはJavaScriptが大規模な…

Dartにおける関数の動作まとめ

Dartの関数はJavaScriptと同様第一級オブジェクトです。 このへんが開発者であるGoogleさんのいう「動的な」特性になると思うので、すごく簡単に動きをまとめてみようかと思います。普通に関数定義。 bar(int x) => x*x; foo() => print("bar = ${bar(3)}");…

Googleの新言語Dart音速レポート

Googleが新言語を発表したそうです。まったく嗅ぎつけてなかったので今さっきTwitterで初めて知った所です。ざっくりと概要を纏めると、現状Webアプリの開発言語と言えばJavaScriptだが、JavaScriptは単なる言語の進化では修正できない根本的な問題をかかえ…

遅延評価についてもう少し

次の例を考えてみます。 Prelude> let foo = 1 : map (+1) foo Prelude> take 10 foo [1,2,3,4,5,6,7,8,9,10]例えば、機械的に四つ目の要素を計算する部分を書いたら次のようになりますよね。 Prelude> 1 : map (+1) [1,2,3] [1,2,3,4]五つ目はこう。 Prelud…

関数型言語に慣れる

Haskellの勉強を始めたのは、先日のエントリで書いたとおりです。それまでも、なんとなくLispを触ってみた事はあったのですが、表面を撫でた程度で終わっていたので、これでようやく関数型言語への本格的な第一歩を踏み出した事になります。今はちょうど、す…

メモリをイメージする事

少し、メモリの使われ方について考えさせられる出来事がありました。例えば、以下のソースを見て、即座に気持ち悪さを感じられるかどうかは、一つのステータスかもしれません。 public class Foo { public String getLine(int i){ return "Line - " + i; } }…