再帰的な関数と定義するには rec をつける。
# let rec fact n = if n = 0 then 1 else n * fact (n - 1);; val fact : int -> int = <fun> # fact 3;; - : int = 6 # fact 6;; - : int = 720
あまり大きな整数は表現できないらしい。
# fact 30;; - : int = -738197504
takatoh's blog – Learning programming languages.
再帰的な関数と定義するには rec をつける。
# let rec fact n = if n = 0 then 1 else n * fact (n - 1);; val fact : int -> int = <fun> # fact 3;; - : int = 6 # fact 6;; - : int = 720
あまり大きな整数は表現できないらしい。
# fact 30;; - : int = -738197504
32bit CPU の場合には, から まで。それぞれ,min_int,max_int として定義されている。
# min_int;; - : int = -1073741824 # max_int;; - : int = 1073741823
これを超えると駄目。
# min_int - 1;; - : int = 1073741823 # max_int + 1;; - : int = -1073741824
プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~ p.51より。再帰的に定義する。
# let rec euclid m n = if m = n then m else if m > n then euclid n m else euclid (n - m) m ;; val euclid : int -> int -> int = <fun> # euclid 12 60;; - : int = 12 # euclid 12 6;; - : int = 6
基本的には m≦n のつもりで書いているけど,n – m と m の大小関係は決定できないので3行目を入れた。これで m と n の大小関係も気にしなくて済んでいる。
2つ(あるいはそれ以上)の関数を and でつないでいっぺんに定義できるがおもしろい。
and の後の関数には let rec が要らない。
# let rec even n = if n = 0 then true else odd (n - 1) and odd n = if n = 0 then false else even (n - 1) ;; val even : int -> bool = <fun> val odd : int -> bool = <fun> # even 3;; - : bool = false # even 4;; - : bool = true # odd 5;; - : bool = true # odd 8;; - : bool = false
こないだ買ったOCamlの本プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~を少しずつ読んでいる。
まずは基本的な型:
整数と実数で演算子が違う。
間違えるとエラーになる。
# 1 + 2;; - : int = 3 # 1.0 + 2.5;; Characters 0-3: 1.0 + 2.5;; ^^^ This expression has type float but is here used with type int # 1.0 +. 2.5;; - : float = 3.5
文字列の連結
# "Hello," ^ " world.";; - : string = "Hello, world."
文字列.[n] という書き方でn番目の文字を取得できる(先頭が0番目)。
# "Hello, world.".[0];; - : char = 'H' # "Hello, world.".[4];; - : char = 'o'
let式を使う。
# let pi = 3.141529;; val pi : float = 3.141529 # pi;; - : float = 3.141529
これも let式を使う。
# let area_of_circle r = r *. r *. pi;; val area_of_circle : float -> float = <fun> # area_of_circle 1.0;; - : float = 3.141529
引数の型を間違えないこと。
# area_of_circle 1;; Characters 15-16: area_of_circle 1;; ^ This expression has type int but is here used with type float
プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~
インタアクトによってローカライズされた trac-ja を使う。
Python が最新の2.5でないのは ClearSilver が対応していないから。
PySQLite は 2.4.0 が最新版だけど trac-admin コマンドを実行したときにエラーが出た。以前にダウンロードした 2.3.3 を試してみたら大丈夫だったので,こちらを使うことにした。
Subversion はインストール済みだったけど,ついでにアップデート。やり方は省略。
インストーラだからダブルクリックしてインストールするだけ。
Python は C:\usr\python24 にインストールした。パスを通すのを忘れずに。
ファイルを展開して:
^o^ >cd docutils-0.4 ^o^ >python setup.py install
これも同様。ファイルを展開して:
^o^ >cd trac-0.10.4-ja-1 ^o^ >python setup.py install
Thank you for choosing Trac 0.10.4. Enjoy your stay! と出たので無事完了。
まずはリポジトリを作っておく。
^o^ >svnadmin create D:/svn/sample
tracの設定には trac-admin コマンドを使う。
^o^ >python C:\usr\python24\scripts\trac-admin D:/www/trac/sample initenv Creating a new Trac environment at D:\www\trac\sample Trac will first ask a few questions about your environment in order to initalize and prepare the project database. Please enter the name of your project. This name will be used in page titles and descriptions. Project Name [My Project]> Sample Project Please specify the connection string for the database to use. By default, a local SQLite database is created in the environment directory. It is also possible to use an already existing PostgreSQL database (check the Trac documentation for the exact connection string syntax). Database connection string [sqlite:db/trac.db]> Please specify the type of version control system, By default, it will be svn. If you don't want to use Trac with version control integration, choose the default here and don't specify a repository directory. in the next question. Repository type [svn]> Please specify the absolute path to the version control repository, or leave it blank to use Trac without a repository. You can also set the repository location later. Path to repository [/path/to/repos]> d:/svn/sample Please enter location of Trac page templates. Default is the location of the site-wide templates installed with Trac. Templates directory [C:\usr\python24\share\trac\templates]> Creating and Initializing Project Installing default wiki pages C:\usr\python24\share\trac\wiki-default\CamelCase => CamelCase C:\usr\python24\share\trac\wiki-default\checkwiki.py => checkwiki.py C:\usr\python24\share\trac\wiki-default\InterMapTxt => InterMapTxt (snip) C:\usr\python24\share\trac\wiki-default\WikiPageNames => WikiPageNames C:\usr\python24\share\trac\wiki-default\WikiProcessors => WikiProcessors C:\usr\python24\share\trac\wiki-default\WikiRestructuredText => WikiRestructur e dText C:\usr\python24\share\trac\wiki-default\WikiRestructuredTextLinks => WikiRestr u cturedTextLinks C:\usr\python24\share\trac\wiki-default\WikiStart => WikiStart Indexing repository --------------------------------------------------------------------- Project environment for 'Sample Project' created. You may now configure the environment by editing the file: D:\www\trac\sample\conf\trac.ini If you'd like to take this new project environment for a test drive, try running the Trac standalone web server `tracd`: tracd --port 8000 D:\www\trac\sample Then point your browser to http://localhost:8000/sample. There you can also browse the documentation for your installed version of Trac, including information on further setup (such as deploying Trac to a real web server). The latest documentation can also always be found on the project website: http://trac.edgewall.org/ Congratulations!
D:\www\trac\wample\conf\trac.ini ファイルを編集:文字コードだけ。
: [trac] : default_charset = japanese.shift_jis :
trac にはスタンドアロンのサーバがついている:
^o^ >python c:/usr/python24/scripts/tracd --port 8000 d:/www/trac/sample
これでブラウザから http://localhost:8000/ にアクセスすれば,プロジェクトの一覧が表示される。