---
# System prepended metadata

title: 円算機

---

# 円算機マニュアル
https://en-zan-ki.trap.show/
円算機は，物理演算っぽいヴィジュアルプログラミング言語(?)です．
ボール同士の衝突を介してプログラムの状況が変化します．
## ボールの種類
### 数ボール
数を表すボールです．
### 関数ボール
関数を表すボールです．他のボールと衝突した場合，自分自身と衝突したボールをそれぞれ別のボールへ置き換えます．nullに置き換えることで，ボールを消滅させるような処理も可能です．
### 高階関数ボール
高階関数を表します．関数と衝突した際に関数ボールと同様にボールが置き換えられます．
### 出力ボール
出力用のボールです．数ボールが出力ボールに衝突した場合，両方のボールが消滅し，数ボールの値が配列上の指定されたindexに保存されます．すべての出力ボールが消滅すると，プログラムは終了し，ダイアログにすべての出力が表示されます．
## curry化された関数について
衝突は二物体間でのみ生じるため，他変数関数を実装することは不可能です．そのため，円算機ではcurry化された関数を使用することで他変数関数を１変数関数のみを使って実装しました．
例えば，「+」関数ボールに「２」数ボールがぶつかった場合，「2+」関数ボールが出力されます．これは，x⟼x+2のような関数を表します．「2+」関数ボールが「3」数ボールにぶつかった場合，「５」数ボールが出力されます．
## 操作方法
時間が足りなくて拙いuiになってしまいました;;
ボールを削除する方法は実装し忘れたのでないです
![スクリーンショット 2024-06-16 21.59.07](https://hackmd.io/_uploads/r17wzPnS0.png)
①物理演算画面
実際にボールとかが表示される画面です．編集中にボールをドラッグすることでボールの初期位置を変えることができます．
②Playボタン
プログラムを実行します
③Editボタン
プログラムを編集します．
④saveとload
savedataにセーブデータ名を入力し，saveを押すことで現在の内容をセーブできます．同様にloadを押すことでロードできます．
⑤ボールを追加する画面
ボールのIDと種類を指定し，ボールを追加をクリックすることで新たにボールを追加できます．
⑥ボールの編集画面
ボールのidを入力し，enterを押すことでボールを編集できます．バグが多いので反映されない場合はボールのidに別のidを入力してから再度入力しなおしたりしてください．