2008-01-01から1年間の記事一覧

MXML

AIR

MXML は,ウィンドウの構成を記述する。こんな感じ。 <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" title="Hello AIR"> <mx:Script> </mx:Script> </mx:windowedapplication>

Web上の情報とか

AIR

Adobe AIR -- 公式サイト。AIR(ランタイム)やSDKのダウンロードはここから。 Flexデベロッパー向け Flex用Adobe AIRデベロッパーセンター AIRギャラリー -- AIRアプリがいろいろ。 Flex 3 リファレンスガイド -- ActionScript3のリファレンス。AIRについて…

開発ツール

AIR

無償の開発ツールとしては,Adobe から2つ配布されている。 Adobe AIR SDK Flex 3 SDK AIR SDK のほうは HTML + JavaScript ベースの開発ツールみたい。今回は Flex ベースの Flex 3 SDK を使う。 どっちも http://www.adobe.com/jp/products/air/tools/ か…

Adobe AIRに手を出した

AIR

ブログもOCamlもほったらかし(一応「プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~」は最後まで読んだ)のままだったけど,最近はAdobe AIRに手を出した。 AIR は Adobe Integrated Runtime の略で,RIA(Rich Internet Application…

-1 を 10 で割ったあまりは?

どう書く?org のこのお題,はじめはHaskellで書いた。 modular n l h = l + n `mod` (h - l + 1) すでに投稿があったのでOCamlで書き直したんだけど,そのまま移植したんではうまくいかない。 # let modular n l h = l + n mod (h - l + 1);; val modular :…

METHINKS IT IS LIKE A WEASEL

cf. どう書く?org - METHINKS IT IS A WEASELずいぶん前に「ブラインドウォッチメイカー」を読んだ書いてみたもの。出遅れだし,お題ともちょっと違うので投稿せずにここにさらしておく。 IDEAL = "METHINKS IT IS LIKE A WEASEL" class Individual def ini…

練習問題 10.3 fold コマンド

プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~のp.215より。 wc コマンドはなんか難しいのでこっちを先に。 UNIX の fold コマンドは,ファイル名の列を引数として,その内容を,長い行を複数の短い 行(デフォルトでは80文字)に分…

練習問題 10.1

プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~のp.215より。 UNIXの cat コマンドは,ファイル名の列を引数として,その内容を順次表示する(標準出力 に書き込む)ものです。これを OCaml で実装し,実行可能ファイルを作成しなさ…

Problem 31

今日は Problem 31。cf. Project Euler - Problem 31 cf. Life Goes On - 31問目id:rst76さんのをちょっと改良して1pのコインがない場合にも対応できるようにしてみた。問題の解答には必要ないんだけど。 module Main (main) where euler031 :: [Int] -> I…

Problem 14

今日は Problem 14。cf. Project Euler - Problem 14コラッツ問題の数列を求めるのは以前にやったのを流用。あとは力任せに… module Main (main) where collatz :: Int -> [Int] collatz 1 = 1 : [] collatz n | n `mod` 2 == 0 = n : collatz (n `div` 2) |…

Problem 8

今日は Problem 8。cf. Project Euler - Problem 8 module Main (main) where import Data.List import Data.Char euler008 :: [Char] -> Int euler008 n = maximum $ map euler008' $ nums n where nums = filter (\x -> length x > 4) . map (take 5) . ta…

Problem 13

今日は Problem 13 をやってみた。これは簡単。cf. Project Euler - Problem 13 nums :: [Integer] nums = [37107287533902102798797998220837590246510135740250, 46376937677490009712648124896970078050417018260538, 7432498619952474105947423330951305…

Problem 12

今日は Problem 12をやってみた。cf. Project Euler - Problem 12 via 自堕落系徒然日記 - Problem 12 三角数の約数 import Data.List triangleNumbers :: [Integer] triangleNumbers = snd $ mapAccumL (\a x -> (a+x, a)) 1 [2..] divisors :: Integer -> …

unfold で1から10までのリスト

unfold を覚えたので,こないだの1から10までのリストを unfold を使ってやってみる。 と思ったら unfold が見つからないのでまずはその定義から。 # let rec unfold f init = match f init with Some (a, b) -> a :: unfold f b | None -> [] ;; val unfold…

Sys.argv

コマンドライン引数は Sys.argv に配列として格納される。インデックス0がプログラム名で,以下引数の数だけ続く。 インデックス0を出力する例: let () = print_endline Sys.argv.(0) ^o^ >ocamlc -o argv.exe argv.ml ^o^ >argv argvインデックス1を出力す…

Array.iter

Array.iter は配列に対して 'a -> unit 型の関数を順に適用する関数。List.iter の配列版。これを使えばコマンドライン引数の数だけ繰り返せる。 let () = Array.iter (fun s -> print_endline s) Sys.argv ^o^ >argv2 foo bar buz argv2 foo bar buz

unfold

なるほど,unfold ってこういうふうに使えるのか。cf. ZOETROPEの日記 - Foundations of F#を読む(3)Haskellでやってみる。 *Main> take 10 $ Data.List.unfoldr (\(n0,n1) -> Just (n0, (n1, n0+n1))) (1, 1) [1,1,2,3,5,8,13,21,34,55] unfoldr に与える関…

インターフェイスファイル

ソースファイル(=モジュール)と同名で拡張子が .mli のファイルを用意しておくことで,モジュールにシグネチャを与えることができる。 前にも例に挙げた Table モジュールを例にとると, table.mli type ('a, 'b) t val empty : ('a, 'b) t val add : 'a -…

コンパイラがcmiを探すディレクトリ

次のディレクトリを順に検索する。 ocamlc コマンドを起動したディレクトリ ocamlc コマンドの -I オプションで指定したディレクトリ 標準ライブラリのディレクトリ

Problem 2

今日は Problem 2。フィボナッチ数列のうち4,000,000以下で偶数のみを合計せよ,という問題。cf. http://projecteuler.net/index.php?section=problems&id=2Haskell ではやってる人がいるので,OCaml でやってみた。 let fibs_under_n n = let rec fibs a b …

1から10までのリスト

って OCaml ではどう書けばいいんだろう。 Haskell では簡単に [1..10] と書ける。 Prelude> [1..10] [1,2,3,4,5,6,7,8,9,10]これなら10といわずいくつまででも簡単だ。だけど OCaml こういう書き方はできないらしい。 # [1..10];; Characters 4-6: [1..10];…

分割コンパイル

ソースファイルは1つじゃなくてもいい。次の例では,fact関数を定義している fact.ml と,それを呼び出す main.ml に分けている。fact.ml let rec fact n = if n = 0 then 1 else n * fact (n-1) main.ml let () = print_int (Fact.fact 5) OCamlではファイ…

コンパイラ

OCaml のコンパイラには ocamlc と ocamlopt の二つがある。 ocamlc バイトコードを出力。機種非依存。 ocamlopt ネイティブコードを出力。機種依存。 ocamlc の出力したバイトコードはどの機種でも動作するけど,ただし,バイトコートインタプリタというプ…

mainに相当する関数

OCamlにはない。 代わりに, let () = ...とか let _ = ...とかするみたい。 let hello () = print_string "Hello world!\n" let () = hello () ^o^ >ocamlc -o hello.exe hello.ml ^o^ >hello Hello world!

Probrem 21

今日は Probrem 21 をやってみた。cf. http://projecteuler.net/index.php?section=problems&id=21数 n に対して約数(nを含まない)すべてを足しあわせる関数 d があるとして,d(a) = b かつ d(b) = a となるような a と b (ただしa≠b)を amicable pair,…

Project Euler

ってのがあるのか。cf. http://projecteuler.net/index.php via Life Goes On - はじめました気が向いたときにはやってみるかな。 とりあえず Problem 1 を内包表記で。 euler0001 :: Int -> Int euler0001 n = sum [x | x <- [1..(n-1)], or [x `mod` 3 == …

コラッツ予想

cf. Way of My Life - コラッツ予想Haskell と OCaml でやってみた。 与えられた数から1になるまでをリストで返す。 collatz :: Int -> [Int] collatz 1 = 1 : [] collatz n | n `mod` 2 == 0 = n : collatz (n `div` 2) | otherwise = n : collatz (n * 3 +…

データの整列

どう書く?.orgに投稿した。cf. データの整列sort_by_dic が辞書順に整列する関数,sort_by_dis が距離の昇順に整列する関数。 type point = Point of float * float let compare_point a b = match (a, b) with (Point (x1, y1), Point (x2, y2)) -> if x1 …

データの整列(Haskell版)

同じことをHaskellで。Ordクラスのインスタンスにしたら sortByDic はただの sort ですんだ。 import List data Point = Pt Float Float deriving (Show, Eq, Ord) distance :: Point -> Float distance (Pt x y) = sqrt (x * x + y * y) sortByDic :: [Poin…

モジュールの定義

モジュール(正確にはストラクチャ)の定義は次のようにして,struct と endo のあいだに各種定義の書く。 # module Tree = struct type 'a t = Lf | Br of 'a * 'a t * 'a t let rec size = function Lf -> 0 | Br (_, left, right) -> 1 + size left + siz…