あ、も一つ実行例
slot0: exec 1
slot1:
option strict
goto @l
var x[8]
@l
x=1.9 ' エラーにならない
? x ' エラーにならない。1.9 と出力
なんか気持ち悪い、メモリリークでもしそうなコードですね!!
1そうだね プレイ済み
var n = 8
でコンパイル時に n = 8 が代入されないのは残念です。
例えば
const n = 8
でコンパイル時に型(スカラ/ベクタ)を決定できて、値の初期化もできたら嬉しいですね。
0そうだね プレイ済み
var n = 8 という記述は
var n 'という宣言と
n = 8 'という実行文をあわせたシンタクスシュガーであることがわかる。
var n によりコンパイル時には n というシンボルを登録するが、その段階で n はスカラでも配列でもないし、もちろん 8 という値が代入されることもない。
exec 時に n = 8 という命令が実行されることにより、n = 8 という代入が行われる。
0そうだね プレイ済み
もう一つ
slot 0: exec 1
slot 1: option strict: goto @l: var n = 8: @l ? n ' 0 を出力
(b) 実行時に起きること
1 option strict
2 goto @l
- var n = 8 'この行は実行されない。
3 @l
4 ? n ' 0 を出力
0そうだね プレイ済み
(b) 実行時に起きること
1 option strict
2 goto @l
- var x[8] ' この "var 命令" は実行されない。
3 @l
4 ? x[0] ' type mismatch エラー発生。プチコンは x が配列であると思っていない。
var x[8] という行は、コンパイル時には x というシンボルを登録するが、その段階で x はスカラでも配列でもない。
exec 時に var x[8] という行が「実行」されることにより、「x は 8 要素の配列である」ことが確定する。
0そうだね プレイ済み
(a) コンパイル時に起きること
option strict '以下未定義変数を参照したらエラー
goto @l
var x[8] ' x というシンボルを定義する。ただし配列であるという属性は登録されない。
@l
? x[0] ' x は定義済みなのでエラーにならない。xが配列であるかスカラーであるかはチェックしない
0そうだね プレイ済み
(1) option strict: ? n ' undefined variable エラー
(2) option strict: goto @l: var n: @l: ? n ' エラー無し、出力無し: var による宣言はコンパイル時に処理される。(コンパイルのみなので ? 命令は実行されない)
(3) option strict: goto @l: var x[8]: @l: ? x[0] 'エラー無し、出力無し
ここで slot 0 を exec 1 に変更して実行すると・・・
(3') ' ? x[0] 命令で Type mismatch エラー発生。
use (コンパイルのみ) では発生しなかったエラーが、exec で発生しました。
0そうだね プレイ済み
option strict と var/dim 命令の正確な効果とは?
前提として
- use 命令ではコンパイルだけ行われる
- exec 命令は use + run と同じような動きをする
というのがあります。ソースはネットで見た。ウソウソ↓これです。
https://miiverse.nintendo.net/replies/AYMHAAACAAADVHkNroE4Lg
slot 0 には use 1 だけ書いときます。以下は全て slot 1 のプログラム。
その状態で run した結果を各行のコメントに書きます。
10そうだね プレイ済み
タバひめさんの数当てゲーム楽しいですよ。
プチコンと戦うの。
0そうだね プレイ済み
- web 初心者入門
- mkII 初心者講座
- おちゃめさんのプチコンサイト
あたりを見るといいってじっちゃんが言ってた!!
0そうだね プレイ済み
あ、成り行き上おちゃめさんのコメへのコメに見えたかもしれませんが、くもきさんのコード見てのコメントですよ。念のため。
おちゃめさんのような熟練のプログラマーが、自らのコードを詳しく解説してるのであれば、これはある意味ペアプログラミング的な教材になるのではないでしょうか? コードを通じておちゃめさんの哲学に触れることができるという・・
1そうだね プレイ済み
オカさんの heartbeat みたいに思ってます。
お、今日も生きてた! みたいな。
個人的には、まあ、進捗なしの報告はいらないかなあとも思います。(やるなって意味ではないですよ!!)
0そうだね プレイ済み
なんか読み返してて不安になってきたけど、
いかさんは
式1 演算子 式1
という式を「評価する(値を計算する)」話をしてるのかな????
これは、次のような命令と実行時スタックを使って
push 式1
push 式2
演算処理 (スタックから 2 つの値を pop して、それらの演算結果を push する)
という動作になります。これは一般的な「スタックマシン」という計算モデル。
この場合でも式 1+2 を評価して 3 になるってことを
「1+2 は 3 に収束する」
とは、日常会話でも数学でも情報工学でも言わないってのは、ご理解頂けただろうか?
0そうだね プレイ済み
「還元」について補足すると
式 := 式 + 式
式 := 1 | 2 | 3
という文法があったとき、
1+2+3
という入力に対して、
1+2 は 2番目の文法により「式+式」に還元でき、それは1番目の左辺の「式+式」という形式なので、右辺の「式」に還元できます。すると
1+2+3 は「式+3」という形式になるので、これは「式+式」という形式に還元され、同様に「式」に還元できます。これで 1+2+3 は唯一つの「式」に還元することができます。
なお、入力を最後まで還元できたとき、これは「受理(accept)された」といいます。
(注意: 実際にはこの文法だと一行目の文法で「シフト(shift)」という概念により処理されると考えたほうがいい。詳しくはコンパイラの教科書参照)
0そうだね プレイ済み
いかさん>論理値と論理値を演算する時は、論理演算子が必要ですよ
smilebasic ではいかさんのおっしゃる論理値に対して、算術演算(+とか-ね)が可能です。つまりいかさんのおっしゃる論理演算(&&と||のこと?)が必要とされているわけではない。
だからイカさんの主張は偽であり、でたらめです。
上で書き忘れたけど、smilebasic のエラーは「ソフトウェア割り込み」の一種であります!!
0そうだね プレイ済み
いかさん> 例外(エラーとも謂い、プチコン3号では、Syntax error)が発生します。
だから違うって。
例外 ⊇ エラー
だから。
「例外」は「割り込み」含むから。
「割り込み」って聞いたことないかな???
プチコンだと 1/60 秒ごとに、 vsync 割り込み(ハードウェア割り込みの一つ)が発生して、その例外処理として「メインスレッド」が動き出すんですよ。
0そうだね プレイ済み
いかさん
> 此れで、(A==1 && B==1) || (C==1 && D==1) が TRUE に成りました。最初色々有った物が、最後に1個に成りましたね。此れを『収束』と謂う事に何か不都合は有りますか?
了解です!!
うーん。ちゃんと概念を把握してるのですね。すばらしい!!
情報工学ではこれは「還元(reduce)」と言います。
だからコンピュータ言語についてその概念を語る時は、「還元」という用語を使うことをオススメします!!
不都合はあります。話が通じないことです。
0そうだね プレイ済み
オワタさん
やたら漢字使ったり正かなづかひを使ったりする人は結構います。何かこだわりがあるのでしょう。ブログでやるのは構わないが、読む側のコストを考慮せずコミュニケーションの場にまで持ち込むのは、公共の場での示威行為に近い。
他にも独自の用語を使い続けるなど、どうも世界は自分中心に回ってるような印象を受けます。
再三の指摘にも改善が見られないようなので、オワタさんが要求するのは自由ですが、効果は薄いかなあと思います。
ただ、ちゃんと日本語は通じるみたいなので、日本人なのに日本語が通じない人々よりはだいぶましです。私ももうちょっと付き合おうという気になってます。
5そうだね プレイ済み