LoginSignup
3
0

COWで四則演算を実装したい

Posted at

はじめに

 はじめまして、一つ目の記事でCOWについて語るwatnow所属のえいじです。watnowアドベントカレンダーの7日目としてこの記事を書かせていただきました。
 今回の記事ではプログラミング言語のCOWを使って(割り算以外の)四則演算を実装していきます。
ではやっていきましょう。

COWの実行開発環境

 まず初めに、この言語で実行開発環境を用意するのは大変です。恐らくコンパイラやインタプリタを自作しなければ行けません。しかしそんなことはやってられないので、今回はこちらのCOWをJSに変換して出力してくれるサイトを使って実行等を行いました。

前提知識

 COWに関して情報自体が少なく、自身でも説明できるほど理解できていません。なので前提知識として一度Wikipediaを読んでいただけると幸いです。

足し算編

oom OOM moO
oom OOM
MOO
MOo mOo MoO moO
moo
mOo OOM

pythonで無理やり書くとこんな感じ。
ポインタの概念をリストで表現しています。

sum.py
n = 0
arr =  [0, 0]
a = 2
arr[n] = a
print(arr[n])
b = 3
n += 1
arr[n] = b
print(arr[n])
while arr[n] != 0:
    arr[n] -= 1
    n -= 1
    arr[n] += 1
    n += 1
n-= 1
print(arr[n])

引き算編

oom OOM moO
oom OOM
MOO 
mOo MOo moO MOo
moo
mOo OOM

pythonで無理やり書くとこんな感じ。
足し算の時とほぼ変わりません。

sub.py
n = 0
arr =  [0, 0]
a = 2
arr[n] = a
print(arr[n])
b = 3
n += 1
arr[n] = b
print(arr[n])
while arr[n] != 0:
    arr[n] -= 1
    n -= 1
    arr[n] -= 1
    n += 1
n-= 1
print(arr[n])

掛け算編

oom OOM moO
oom OOM moO
OOO moO
OOO mOo mOo mOo
MOO
 MOo moO
 MOO
  MOo moO MoO moO MoO mOo mOo
 moo
 moO
 MOO
  MOo mOo MoO moO
 moo
 mOo mOo
moo
moO moO moO
OOM

pythonで(以下略)
二重ループを使って都度足し算を行っています。

mult.py
n = 0
arr =  [0, 0, 0 ,0]
a = 2
arr[n] = a
print(arr[n])
b = 3
n += 1
arr[n] = b
print(arr[n])
n -= 1
while arr[n] != 0:
    arr[n] -= 1
    n += 1
    while arr[n] != 0:
        arr[n] -= 1
        n += 1
        arr[n] += 1
        n += 1
        arr[n] += 1
        n -= 1
        n -= 1
    n += 1
    while arr[n] != 0:
        arr[n] -= 1
        n -= 1
        arr[n] += 1
        n += 1
    n -= 1
    n -= 1
n += 1
n += 1
n += 1
print(arr[n])

お詫び

 さて、ここまでさもCOWでの(割り算以外の)四則演算が実装出来たように話してきましたが、感の良いエンジニアならこれらのコードが不完全な事に気が付いたでしょう。そう、これらのコードだと負の数を代入すると、場合によっては無限ループを起こします。この短期間では正負を判定するアルゴリズムが思いつきませんでした。未来の誰かに託します。

おわりに

 今回COWを触って、改めて他の言語の命令の多さにありがたみを感じました。皆さんも一度触ってみてはいかがでしょうか。実装出来なかった割り算や正負の判定に関して、なにかアイデアあある方がいらっしゃればコメント等頂けると有難いです。
 それではまたどこかでお会いしましょう。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0