view Haskell.md @ 52:3dbc2d065d17

backup 2021-03-31
author autobackup
date Wed, 31 Mar 2021 00:10:04 +0900
parents e12992dca4a0
children
line wrap: on
line source

# はじめてのHaskell

HaskellをやるためにはまずHaskellコンパイラを導入します。  
最も広く使われているものは、The Glasgow Haskell Compiler (GHC) です。  
導入の方法は色々ありますが、手っ取り早く必要なものを揃えるには、''Haskell Platform'' をダウンロードするのがベストです。  
Haskell Platform には GHC コンパイラだけでなく、便利なHaskellのライブラリのセットも同梱されています。  
Haskell Platform を手に入れるには、http://hackage.haskell.org/platform/ に行って、利用している OS 向けの指示に従ってください

## GHC の構成
- ghc
    - 速いネイティブコードを生成する最適化コンパイラ
- ghci
    - 対話型インタプリタとデバッガ
- runghc
    - コンパイルせずにHaskellプログラムをスクリプトとして走らせるプログラム

# Jungle-haskell
非破壊木構造を扱うHaskell module

## 実際に使ってみよう
研究室のリポジトリからソースを持ってくる
```
$ hg clone ssh://one@firefly.cr.ie.u-ryukyu.ac.jp/hg/Members/toma/Jungle-haskell/
```

Main.hsという、実際にmoduleをimportして利用しているプログラムがあるので参考にする  

## 利用できる型や関数など
### 型
- Jungle
    - 木とStringを組にして保持するデータ型

- Tree
    - RootNodeを保持しているデータ型

- Node
    - childrenとattributesを持つデータ型  
    - childrenとして、他のNodeを持つことができる

- Children
    - IntとNodeを組にして保持するデータ型  

- Attributes
    - StringとByteStringを組にして保持するデータ型

### 関数
- createJungle
    - 空のJungleを作成する

- createTree
    - Jungleと木の名前を渡すと、その名前の空の木を含んだJungleを返す

- getTreeByName
    - Jungleと木の名前を渡すと、木を返す  
    - 木の名前が存在しない場合でも、空の木を返す

- getRootNode
    - Treeから、RootNodeを得ることができる

- getChildren
    - NodeからChildrenを得る

- getAttributes
    - NodeからAttributesを得る

- at
    - ChildrenとIntを渡すとNodeを得られる
    - 存在しない場合でも、空のNodeを返す

- get
    - AttributesとStringを渡すと、ByteStringが得られる
    - 存在しない場合でも、空のByteStringが得られる

- addNewChildAt
    - Treeと、子を追加したいNodeのPath、子を追加したい場所、追加したいNodeを渡すと、追加したTreeを返す

- deleteChildAt
    - Treeと、子を削除したいNodeのPath、削除したい子の場所を渡すと、削除したTreeを返す

- putAttribute
    - Treeと、Attributeを追加したいNodeのPath、Attributeに関連付けたいString、追加したいByteStringを渡すと、追加したTreeを返す

- deleteAttribute
    - Treeと、Attributeを削除したいNodeのPath、Attributeに関連付けたStringを渡すと、削除したTreeを返す