create every day - 福野泰介の一日一創

ルールメイカーになろう! 1+2x3=? 演算子優先順位仕様変更の言い訳

2015/04/22 23:55:00
#IchigoJam #KidsIT 

計算問題です

1+1= 1+2x3=

実はこの問題には欠陥があって、正解は場合によって異なります。

「このはしわたるべからず」

橋と解釈すれば渡れませんが、端と解釈すれば、真ん中を渡ればOK

数学には明確なルールがあってすっきりしましたが、小学校の算数はルールがあいまいで理解できず、嫌いでした。

A=1

プログラミングにおける変数の話です。Aという変数に1を代入する。ここまではなんとなく誰でもはじめてみても違和感ないようです。

A=A+1

方程式を習った中学生はここで混乱します。成り立たない・・・
プログラミング言語の世界では = を慣習的に代入の意味に使うことが多く、プログラマーにとっては当たり前ですが、確かにおかしな書き方です。

LET A, A+1

なので、IchigoJam BASIC では、LETという代入を表すコマンドを使って、AにA+1の値をいれる、という意味で使えるようにしています。前に書いた A=A+1 と全く同じ働きをします。(:= など別の記号に割り当てる言語もあります)

このようにルールが変われば、正解が変わることはよくあることです(オリンピックのルール変更や、新しい法律による規制など)。せっかくなら、ルールをつくる側になりましょうとプログラミングを通じてこども達に伝えています。

・・・ということで、IchigoJamの式の優先順位を訳あって変更する予定です。プログラミング言語によって地味に異なる優先順位、自信が無い時は括弧で囲むのが一般的ですが、ルールをシンプルにすると使いやすくなります。論理演算系が後、次に加減系、乗除系とすぐに覚えられます。別の言語を使うときには、各言語のルールを確かめる癖をつけるのも大事ですよ、と言い訳しつつ、この変更、メモリをかなり節約できるのです!

IchigoJam 演算子優先順位 優先順(ver1.0.0-beta4)

演算子備考
( )括弧
- ~ ! NOT単行演算子(マイナス、ビット反転、論理否定)
* / % MOD << >> & ^掛け算・割り算・除算・ビットシフト・ビットアンド・ビットXOR
+ - |足し算・引き算・ビットオア
= != < > <= >=論理比較
AND論理積
OR論理和

冒頭の問題、答の例
1+1=10 ※2進数と解釈すれば 10 が正解
1+2x3=9 ※すべての優先順位を共通にしたシンプルなルールで解釈すれば 9 が正解

ルールメイカーになろう!
「未来を予測する最善の方法は、それを発明することだ」 by アラン・ケイ

参考リンク
- こどもパソコンIchigoJam
- Facebookグループ - IchigoJam

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / high-res profile image