> For the complete documentation index, see [llms.txt](https://kurohasu.gitbook.io/fsharpabout/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kurohasu.gitbook.io/fsharpabout/compute/konpytshon.md).

# コンピューテーション式

### コンピューテーション式とは

計算（プログラムの実行）には様々な形式がありますが、主にシングルスレッドで処理されます。\
「一つのスレッド（道）で全てを処理する」という事です。\
コンピューテーション式により、アプリケーションの特定部分で実行する必要がある状況依存の計算をエンコードするための統一された構文・抽象化モデルが提供されます。\
全てのコンピューテーション式は「ビルダー」型によってサポートされます\
(この後に紹介する式で使える構文だと思ってください)<br>

### 使用できる式

#### let!

let!を使用することでコンピューテーション式の呼び出し結果が変数に割り当てられます。

```
構文:let! <名前>=<コンピューテーション式>
```

#### and!

let!を複数使用すると高負荷が掛かってしまうため、連続で割り当てを行う場合はand!を使用する必要があります。

```
構文:and! <名前>=<コンピューテーション式>

let! <名前1>=<コンピューテーション式>
and! <名前>=<コンピューテーション式>
のようにlet!が無いとエラーとなります
```

#### do!

do!を使用することでunit型(戻り値なし)を返すコンピューテーション式を呼び出せます

```
構文:do! <コンピューテーション式>
```

#### yield

yieldはコンピューテーション式から値を返し反復処理を行う型(IEnumerable<'T>)に変換します。(シーケンス式に使われます)

```
構文:yield <コンピューテーション式>
```

#### yield!

yield!はコンピューテーション式からの値をフラット(全て値にする)キーワードです。恐らく値を追加するという事だと思われます\
(こちらもシーケンス式でよく使われます)

```
構文:yield! <コンピューテーション式>
```

#### return

returnはキーワードの通り、コンピューテーション式が完了したときに値が戻ります。Cなどの「return」と同じです

```
構文:return <値>
```

#### return!

return!キーワードによりコンピューテーション式が終わり次第、値を割り当て戻します

```
構文:return! <値>
```

#### match!\~with

match!\~withにより別のコンピューテーション式にインライン化し、値のパターンマッチを行えます

```
構文:match! <式> with
        |結果1->
                処理1...
        |結果2->
                処理2...
        |_->
                全て当てはまらない時の処理...
```

#### while!\~do

while\~doもインライン化し、ループ処理を行えるようになっています\
(F#8.0にて追加)

```
構文:while 条件式 do
        処理...
```
