💎Bracmat入門#1 四則演算だがしかし 減算と除算が標準装備されてないだと…
となってるが、安心しちゃいけないぜ、みんな
減算(-)や除算(/)の演算子はありません.
この言語、だいぶ訳ありみたいだな、、、
実際評価してみた ?の行が入力、ビックリマークの行が評価結果だと思いネエ
{?} 1+1
{!} 2
S 0,00 sec (3968.3987)
{?} 2*2
{!} 4
S 0,00 sec (3968.3987)
{?} 4/2
{!} 4/2
S 0,00 sec (3968.3987)
{?} 4-1
{!} 4-1
S 0,00 sec (3968.3987)
ほ、ほんまや。。。。
減算、マイナス演算子ないので、マイナスどうしを加算で!
{?} -1+-1
{!} -2
S 0,00 sec (3994.4032)
そうなんです、
除算、除算演算子つかえないかわりに、分数で乗算してください!!
{?} 3*1/3
{!} 1
S 0,00 sec (3994.4032)
そうなんです、小学校思い出しますね!!なんなんだよこれ
なんで、こんなに面倒くさいの??
理由はいくつかあると思います。予想も含みですが
悪いことばかりじゃないよ面白いこともあるよ
代数的な式を、俺ルールみたいな書式でまとめてくれます。例をいくつかのせます。
{?} x^2*x^4
{!} x^6
S 0,00 sec (3996.4032)
{?} x*x*x*2
{!} 2*x^3
S 0,00 sec (3998.4032)
ある法則にしたがって式をまとめてくれるようです。また彼らは「そういうことがしたい」ということのようでした。なんかすげー
ちょっと先の事 関数
サンプルにあった、2乗を求める関数の書き方です。
{?} square=.!arg^2 {definition}
{!} square
S 0,00 sec (4000.4032)
{?} square$5 {call}
{!} 25
S 0,00 sec (4000.4032)
ドルやら点やらビックリマークやら、記号の特殊さは慣れましょう。javascriptのように=でsquareに対して計算のアサイン(割り当て)をしています。内容はもらった引数(これもargという決めがあって、javascriptのargumentsに似た仕組みです)を!で評価して返すというもので、{}の中身は何とびっくり、コメントで、いくらでもかけます。
実際の評価ではsquare$で引数をここでは5を渡して数が戻ってきます。
宣言中にある.(dot)と呼び出し時の$は別で時間をつかったほうがよく。とりあえずは上の方法だといわゆるjavascriptで慣れている関数言語っぽい関数の定義と呼び出しはできると思ってください。
まとめ
パターンマッチングがとにかく強力で、そのためにいわゆる構造化ー>オブジェクト指向で進化したプログラミング言語では見慣れない表現が多くあるみたいです。仕事でちょうどこのような言語があると便利だと思った案件があるので、もう少し調べていきたいと思います。
WSLで準備した途中と、Winでバイナリ使った例をのせました。WSLもgccデコンパイルして動かせるようになっています。