fc2ブログ

OCamlをつつく4-型推論。気が利く子だねぇ。

前回までののサンプルプログラムを見て何か気づいた人が居るかな?
もう一回変数束縛のプログラムを見てみよう。

let name = "インドリ";;

よく見たら型が明示されていないピヨ。これはLL言語によくある機能で型推論って言うんだ。でもボクはちょっと疑問を感じるピヨ。だってぇ・・・

# 2.0 / 4.0;;
Characters 0-3:
  2.0 / 4.0;;
  ^^^
This expression has type float but is here used with type int

ってエラーが出るピヨ。これがちょっと後味悪いピヨ。まぁ、関数推論は無理としてもOCamlはオブジェクト指向言語なんだから、演算子オーバーライドは用意して欲しかったなぁ。型推論が便利なだけにちょっとだけ不満だなぁ。
ちなみに、型を明示する方法もあるピヨ。明示したい場合はこう書くんだ。

let x : int = 10 + 20;;

このように変数名+コロン+型名で型が明示出来るよ。型推論機能に頼りすぎたら可読性が悪いプログラムが出来上がるから明示する方法も覚えておこう。と言う事で今回は終わり。

テーマ : プログラミング
ジャンル : コンピュータ

OCamlをつつく3-評価束縛。えっ?ボクを束縛するの?

おっはピー。今日も元気にオキャムロウ。さて、この未知なる言語のどこをつつこうかな。
関数型言語といえばやっぱり変数束縛ピヨ。 これは聞くよりも見た方が早いからサンプルを見てね。

let name = "インドリ";;

おや?文字化けしたぞ。OCamlはフランス人だから仕方が無いなぁ。ローマ字にしよう。

let name = indre";;

このプログラムを実行すると変数nameに値が束縛されるピヨ。 イメージとしては値に名札を貼るとしておけば覚えやすいよ。これで変数nameを使用すれば”indre”と表示されるピヨ。

name;;
- : string = "indre"

これはC#やVB.NETなどの命令型言語の使い手にも馴染み深い機能だね。でも、流石、関数型言語というべきなのか関数さえも束縛出来るんだ。このようにね。

let Add x y = x + y;; 
Characters 10-11:
  let Add x y = x + y;; 
            ^
Syntax error

おや?エラーが出たぞ。関数名に大文字を使ったら駄目らしい。理由は後で判明すると思う。多分ね。

let add x y = x + y;; 
add 10 (-5);; 

ここで注意ピヨ。マイナス値は括弧で括って。何故かと言うと、OCamlは関数型言語だからマイナスも関数と看做されるからピヨ。仕方が無いねぇ。この子関数人だからね。面倒くさいと言わずに、「可愛いやつ」と思って暖かくマイナス値に括弧をつけてあげよう。
OCamlはこのように束縛が大事なんだ。誰も彼も束縛するなんてOCamlって淋しがりやなんだね。あんまり束縛されても嫌だけど、ちょっとぐらいなら可愛いと思えるよね。
我ながら変な終わり方。

テーマ : プログラミング
ジャンル : コンピュータ

OCamlをつつく2ー基本型。OCamlは何で出来ているのかな♪

OCamlさん(フランス女性?)をもっと詳しく知りたいから次は基礎型(システム型)をつつく事にしたピヨ。やっぱり基礎型が分からないとプログラミングできないしね。
果たしてOCamlさんはDさんみたいに多いのかな?Lispも複素数とかあったからね。 それにフランス女性を理解するのは難しそうだしぃ(勝手な先入観/妄想) 嗚呼ドキドキワクワクするピヨ。ピーと・・・・・・は!!!発見したピヨ。

  • int・・・整数。ビット数は今のところ不明。
  • float・・・浮動小数点。Cぐらいの精度があるらしい。
  • char・・・文字。引用符で括って表す。例:'a'。
  • string・・・文字列。二重引用符で括って表す。例:"インドリ"。
  • bool・・・真偽。trueかfalseの値を持つ。中間値は無いよ。
  • unit・・・() という値のみを持つ型。C でいうところの void に相当。

案外すっきりしているね。それがOCamlの人気の秘訣なのかもしれない。「最新の言語理論の成果が取り入れられている次世代のプログラミング言語です」と書かれているから身構えたけど、OCamlは今のところ扱い易い言語みたいだね。
話しは明後日の方向に行くけど、初めてOCaml(オキャムル)という名前を聞いたときキャラメルを連想して美味そうだと思ったのはボクだけかなぁ。

テーマ : プログラミング
ジャンル : コンピュータ

OCamlをつつく1-四則演算。電子計算機の基本はやっぱ計算だね。

今日は初めて会った言語だからまずは四則演算を試してみたピヨ。

1 + 1;;

おや?と思った命令型言語の使い手達も多いと思うけど、OCamlはエントリポイントが基本的には無いんだ。おそらく内部ではあるだろうけど、C言語みたいに自分でmain関数を定義する必要が無いからちょっとした計算には便利だね。
次に気になるのが;;ピヨ。 これは見慣れない表現だと思うけど、 なんてことは無いただの行末文字ピヨ。 じゃあ、どんどん計算していこう。OCamlは計算機代わりに使えるね♪

1 - 1;;
2 * 2;;
1 / 4;;

おや?結果が0になったぞ。あっそうか!浮動小数型じゃないからかな。

1.0 / 4.0;;

This expression has type float but is here used with type int

吃驚した。エラーが出たよ。えっと・・・こうすればいいらしい。

1.0 /. 4.0;;

よし成功したピヨ。これで一つわかったよ。OCamlは 強い型指向の言語 なんだね。四則演算から実験するのは馬鹿みたいだけど結構違いがあるんだよね。 ボクは早速OCamlらしさを感じたよ。Lisp経験者のボクが気になったのは、 括弧が無い点と、 演算子が中間記法を採用している点ピヨ。 括弧は別に今の所気にならないけど、中間記法はちょっと残念だね。 おっと、御免一人歩きしているね。
プログラム言語の演算子の記法は前置記法というのがあるんだ。Lispはこの記法を採用しており、計算式は( + 1 2 )とか書くんだ。一見変に見えるけど、実は効率的な書き方なんでボクは結構気に入っていたんだ。 だって、計算式が長い場合前置記法の方が簡潔だし、コンパイラの実装が楽だもん。
例えば、( 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 )を計算すると、 中間記法はこのように+記号が8個もいる。一方前置記法だと、 (+ 1 2 3 4 5 6 7 8 9)となり1回だからタイプの効率がいいんだ。 勿論、これでOCamlの価値が減るわけじゃないけど、個人的にはちょっと残念だなー。

テーマ : プログラミング
ジャンル : コンピュータ

OCamlをつつく0.1ー基礎も大事。はじめましてOCaml。

インドリ「hello OCaml。君はフランス人なんだって?。」

let hello max = 
  let rec iter count = 
    if count < max then begin
        if count = 0 then Printf.printf "hello indre\n";
        print_int count;
        print_string "\t";
        iter ( count + 1 )
    end
    in
    iter 0;;

hello 10;;
Printf.printf "good-by";;

テーマ : プログラミング
ジャンル : コンピュータ

OCamlをつつく0-美味そうな言語発見!

F#をつつこうとしていたら、以前から風の噂で聞いていたOCamlがベースとなっている事を知ったので、OCamlとF#を同時につつく事にしたピヨ。でも、OCamlはWindowsにあまり積極的に実装されていないようで、ボクが今から使おうとしているNative版は70%しか機能が無いらしいorz こんな場合を想定してDebianをインストールしたんだけど、F#とOcamlの両方を使うには不便すぎる! ひとまず70%でもいいからつついてみるよ。
OCamlを知らない人も多いと思うからサラッと紹介しておくと、フランスの国立INRIA研究所で開発されている関数型言語だそうだ。まだつついていないからよくわからないや。細かいことは気にしないで一緒につつこう!ということで、まずは情報源を探そう。


パサ      パサ      パサ    パサ   パサ   パサ  パサ  パサ  朝飯まだ食っていないんだよねぇ  パク パサ ムシャムシャ  パサ


モグモグやっぱりすぐに見つかったよ。じゃあリンクを張るよ。


物足りないけど、話しが取り留めなく長くなるから今回の記事はおしまい。

テーマ : プログラミング
ジャンル : コンピュータ

プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター