再帰的な関数

再帰的な関数と定義するには 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

ユークリッドの互除法で最大公約数

プログラミング 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

演算子

整数と実数で演算子が違う。

  • 整数: +, -, *, /
  • 実数: +., -., *., /.

間違えるとエラーになる。

# 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 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

tracをインストールしてみた

インタアクトによってローカライズされた trac-ja を使う。

必要なもの

Python が最新の2.5でないのは ClearSilver が対応していないから。

PySQLite は 2.4.0 が最新版だけど trac-admin コマンドを実行したときにエラーが出た。以前にダウンロードした 2.3.3 を試してみたら大丈夫だったので,こちらを使うことにした。

インストール

Subversion はインストール済みだったけど,ついでにアップデート。やり方は省略。

Python, PySQLite, subversion python binding, CleasSilver

インストーラだからダブルクリックしてインストールするだけ。

Python は C:\usr\python24 にインストールした。パスを通すのを忘れずに。

DocUtils

ファイルを展開して:

^o^ >cd docutils-0.4
^o^ >python setup.py install
trac

これも同様。ファイルを展開して:

^o^ >cd trac-0.10.4-ja-1
^o^ >python setup.py install

Thank you for choosing Trac 0.10.4. Enjoy your stay! と出たので無事完了。

trac の設定

まずはリポジトリを作っておく。

^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
:

tracd

trac にはスタンドアロンのサーバがついている:

^o^ >python c:/usr/python24/scripts/tracd --port 8000 d:/www/trac/sample

これでブラウザから http://localhost:8000/ にアクセスすれば,プロジェクトの一覧が表示される。