仮称)十進BASIC開発の意図

(仮称)十進BASICが目指すもの
文教大学教育学部
白石 和夫
アルゴリズムを習得する数学教育から
アルゴリズムを作り,使う数学教育へ
 自律思考の育成
 数学的活動の道具
数学的事実の探究
数学理論の実地検証
数学の探訪(DO MATHを楽しむ)

アルゴリズムの概念の習得



人間が使う言葉としてのアルゴリズムの記述
コンピュータの学習をコンピュータ言語への
翻訳技術の習得にしてはいけない
しかし,アルゴリズムを実行してみることは必
要
自律思考を育てる




論理性の育成
論理的な文書の作成
証明の記述を自律的に行えない学習者多い
プログラミングを通して,自律思考を育てたい
数学的活動の道具


数理的現象から構造を見抜く
新しい理論を作る
数学理論の適用
数学のよさを感じ取る
既存BASICの問題点
N88BASIC etc.
論理的表現


A=A+1
代入と相等の区別が身に付かない
文法のむずかしさ
10 A=5
20 IF 1<A<3 THEN PRINT “Y” ELSE PRINT ”N"
文法のむずかしさ
10 IF A=1 THEN B=0 : IF A=2 THEN B=10
アルゴリズムの記述







10
20
30
40
50
60
70
INPUT A,B,C
D=B^2-4*A*C
IF D<0 THEN 60
PRINT (-B+SQR(D))/(2*A), ・・・
GOTO 70
PRINT "kai nashi"
END
アルゴリズムの記述









10
20
30
40
50
60
70
80
90
INPUT N
F=2
IF N=1 THEN GOTO 90
IF N MOD F=0 THEN PRINT F; ELSE GOTO 70
N=N/F
GOTO 30
F=F+1
GOTO 40
END
計算




10
20
30
40
X=0
PRINT X,SQR(X)
X=X+0.1
IF X<>10 THEN GOTO 20
論理性?
計算







10 FOR x=1 TO 100
20 FOR y=x TO 100
30
LET z=SQR(x^2+y^2)
40
IF INT(z)=z THEN PRINT x,y,z
50
NEXT y
60
NEXT x
70 END
N88BASICだと正しい答えが出ない
数学的論理よりもコンピュータ理解が重要?
グラフィックス

(0,0)


(639,399)
エラー処理のむずかしさ







100 ON ERROR GOTO 1000
110 DEF FNF(X)=1/X
120 FOR X=-10 TO 10
130
PSET (X,FNF(X))
140 NEXT X
150 END
1000 RESUME NEXT
SYNTAX ERROR
文法誤りが実行してみないとわからない
10 FOR I=10 TO 1OOO
20 ・・・・
30 NEXT
40 PLINT A

解決するには?

独自言語
ひとつに絞るのは難しい
(百花繚乱)
仕様かバグか不明確
(利用者泣かせ)
ISO Full BASIC


BASIC言語の国際規格(日本ではJIS)
J.G.Kemeny と T.E.KurtzのTrue BASICが土
台
Full BASICの特徴







数値は浮動小数点10進数
演算結果の正確さに関する規定を持つ
構造化言語
再帰呼び出し可能な副プログラム,関数定義
構造化例外状態処理
問題座標系によるグラフィックス
文法誤りは実行前に検出される
(文法より論理の構築に集中できる)
処理系の都合でなく,
使う側の都合に合わせた文法


マイクロソフトBASIC
大小比較,論理演算は数値演算の一部
(真は‐1,偽は0,非負を真と解釈)
だから,1<A<3の値は-1(真)
Full BASIC
大小比較,論理演算は数値演算と非互換
だから,1<A<3は文法誤り
(翻訳時に検出される)
Full BASICの特徴(弱点?)


作るのが面倒
文法を拡張したほうが作成が容易。
しかし,それは,機械と人間とで意味の解釈
の相違を生み出す原因になる。
厳格な文法のよさが知られていない
「文法が拡張されている」と聞くと「よさそう」
と思ってしまう人が多い(実際は誤り)。
アルゴリズムの記述

人間の使うアルゴリズム記述言語でプログラ
ムを書くべきである。

プログラミング言語への翻訳がプログラミング
の作業であってはならない。
プログラミングは,論理を組み立てる作業で
あるべき。
2次方程式の解
10
20
30
40
50
60
70
80
INPUT a,b,c
LET D=b^2-4*a*c
IF D>=0 THEN
PRINT (-b+SQR(D))/(2*a),・・・
ELSE
PRINT "kai nashi"
END IF
END
素因数分解
100
110
120
130
140
150
160
170
180
190
INPUT N
LET F=2
DO UNTIL N=1
DO UNTIL MOD(N,F)<>0
PRINT F;
LET N=N/F
LOOP
LET F=F+1
LOOP
END
計算


数値は浮動小数点10進数
(整数型,単精度,倍精度などの別がない)
組込関数の正確さが規格で定められている。
(数学的に正しい値が整数になる演算の結果
は整数になることが保証される)
計算(実用性)
ASIN,ACOS,ANGLE,LOG10などの関数
 OPTION ANGLE DEGREES
 MOD(x,y)は,x-y*INT(x/y) で定義される
MOD(-2,10)は 8
MOD(4.71, 3.14)は 1.57
(MicrosoftのMOD演算子と定義が異なる)
(-2) MOD 10 は -2

グラフィックス


計算結果を図示する
GUIが目的ではない
Full BASICのグラフィックス




問題座標系
描画領域の初期値は正方形
xyプロッタを想定した描画命令
4×4の2次元配列(行列)を利用して
アフィン変換,射影変換が可能
関数のグラフ






10
20
30
40
50
60
DEF f(x)=x^3-4*x
SET WINDOW -4,4,-4,4
FOR x=-4 TO 4 STEP 0.1
PLOT LINES: x,f(x);
NEXT x
END
例外状態処理
100
110
120
130
140
150
160
170
180
190
DEF f(x)=1/x
SET WINDOW -4,4,-4,4
FOR x=-4 TO 4 STEP 0.1
WHEN EXCEPTION IN
PLOT LINES: x,f(x);
USE
PLOT LINES
END WHEN
NEXT x
END
(仮称)十進BASIC



Windows版とLinux(x86)版がある。
JIS Full BASICのうち
中核機能単位・図形機能単位
付属書のモジュールおよび単文字入力
に対応(若干の非互換あり)
フリーソフト(再配布も可)
(仮称)十進BASIC Win32版


テキスト出力は1メガバイト超でも表示できる
(結果はスクロールして見ることができ,
保存したり,クリップボードにコピーしたり,
印刷したりできる。)
グラフィックスは,ビットマップのほか,メタファ
イルの作成にも対応。
文法


行番号はなくてもよい
処理系を簡略化するための拡張文法は採用
していない。
(意味があいまいになるかもしれない構文が
文法的に禁止される)
計算


正確さのために,一般的なライブラリに頼ら
ず,独自の計算ルーチンを使用
たとえば,LOG10(1000)は正確に3になる
例
10 PRINT LOG10(1000)-3
20 END
を実行すると,答えは0

再帰呼び出し可能な絵定義



絵定義は描画用の手続き定義で,副プログラ
ムの機能の他,実行時に図形変形の指定が
可能。
図形変形は組込みの変形(拡大,平行移動,
回転,剪断のほか,4行4列の行列による射
影変換も可能で,それらの積を書くこともでき
る。)
絵定義の再帰呼び出しを利用すると,自己相
似図形が簡単に描ける。
PICTURE D(n)
IF n=20 THEN
PLOT POINTS: 0,0
ELSE
DRAW D(n+1) WITH ROTATE(PI/4)*SCALE(r)
DRAW D(n+1) WITH SHIFT(-1,0)*ROTATE(PI/4)*SCALE(1/SQR(2))*SHIFT(1,0)
END IF
END PICTURE
SET WINDOW -1/2,3/2,-1,1
DRAW axes
SET POINT STYLE 1
DRAW D(1)
END
独自拡張



複素数モード
十進1000桁モード
有理数モード(多倍長)
できないこと





数式処理(コンピュータ代数)
多倍長整数の高速計算
構造型の変数
動的変数
オブジェクト指向