420 likes | 731 Views
(仮称)十進 BASIC が目指すもの. 文教大学教育学部 白石 和夫. アルゴリズムを習得する数学教育から アルゴリズムを作り,使う数学教育へ 自律思考の育成 数学的活動の道具 数学的事実の探究 数学理論の実地検証 数学の探訪( DO MATH を楽しむ). アルゴリズムの概念の習得. 人間が使う言葉としてのアルゴリズムの記述 コンピュータの学習をコンピュータ言語への翻訳技術の習得にしてはいけない しかし,アルゴリズムを実行してみることは必要. 自律思考を育てる. 論理性の育成 論理的な文書の作成 証明の記述を自律的に行えない学習者多い
E N D
(仮称)十進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 INPUT A,B,C • 20 D=B^2-4*A*C • 30 IF D<0 THEN 60 • 40 PRINT (-B+SQR(D))/(2*A), ・・・ • 50 GOTO 70 • 60 PRINT "kai nashi" • 70 END
アルゴリズムの記述 • 10 INPUT N • 20 F=2 • 30 IF N=1 THEN GOTO 90 • 40 IF N MOD F=0 THEN PRINT F; ELSE GOTO 70 • 50 N=N/F • 60 GOTO 30 • 70 F=F+1 • 80 GOTO 40 • 90 END
計算 • 10 X=0 • 20 PRINT X,SQR(X) • 30 X=X+0.1 • 40 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 INPUT a,b,c 20 LETD=b^2-4*a*c 30 IF D>=0 THEN 40 PRINT (-b+SQR(D))/(2*a),・・・ 50 ELSE 60 PRINT "kai nashi" 70 END IF 80 END
素因数分解 100 INPUT N 110 LET F=2 120 DO UNTIL N=1 130 DO UNTIL MOD(N,F)<>0 140 PRINT F; 150 LET N=N/F 160 LOOP 170 LET F=F+1 180 LOOP 190 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 DEF f(x)=x^3-4*x • 20 SET WINDOW -4,4,-4,4 • 30 FOR x=-4 TO 4 STEP 0.1 • 40 PLOT LINES: x,f(x); • 50 NEXT x • 60 END
例外状態処理 100 DEF f(x)=1/x 110 SET WINDOW -4,4,-4,4 120 FOR x=-4 TO 4 STEP 0.1 130 WHEN EXCEPTION IN 140 PLOT LINES: x,f(x); 150 USE 160 PLOT LINES 170 END WHEN 180 NEXT x 190 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桁モード • 有理数モード(多倍長)
できないこと • 数式処理(コンピュータ代数) • 多倍長整数の高速計算 • 構造型の変数 • 動的変数 • オブジェクト指向