プチコン3号 SmileBASIC コミュニティ投稿Godot orz_1272015/03/23 18:56:13りゅうまごさんが「FILES "//"」でプロジェクト一覧が表示出来ることを発見した模様。 確かに公式ガイドブックをみると書いてある…^^; 以前試行錯誤したとき「FILES "//"」ぐらい試してる筈と、3.0.2で実行してみたら、「Illegal function call(FILES)」。 どうやら3.1.0で機能追加されたらしい…。 で、試しにファイル一覧を表示するプログラムを書いてみました^^14そうだね 20返信プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿Godot orz_1272015/3/23 19:25で、本題とは別件ですが 16行目、「[LEN(F$)==0]」の所、文字列配列F$をSHIFT()でひとつづつ削っていって、最後の1つになったらという意味で「==1」としていたのですが、どうやら先に後ろのSHIFT()が実行されるらしく、LEN()の時点ではサイズ 0 になっているらしい。 なので「==0」に変更。 式の評価順の仕様がよくわかりません orz0そうだね プレイ済み2017/11/03 22:42:24に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿Godot orz_1272015/3/23 20:30またやってしまった orz 肝心のプログラムの画像貼り忘れた。 0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿クッキー k2kkrm2015/3/23 21:03評価順次がわからなければカッコをつければいいじゃない!0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[4]親投稿Godot orz_1272015/3/23 21:45>クッキーさん PUSH L$,"トL"[LEN(F$)==0]+SHIFT(F$) これの何処に()をいれれば? 素直にF$[]が最後のひとつ「==1」なら"L"として、その最後のひとつを取り出してつなげる、としたいのですが、先に右側のSHIFT()が実行されてしまいます^^;0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿クッキー k2kkrm2015/3/23 22:18あれ?どんなに括弧つけても関数が先に評価されるみたいです? 確実にするなら一時変数に入れないと駄目っぽいですね… 説明書には「()で囲まれた部分」の演算子優先順位が一番高かったので()で囲めば良いと思ったのです… ごめんなさい0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[6]親投稿Godot orz_1272015/3/23 23:01通常の式ならば()で何とかなるんですが、今回はそのレベルではなさそうです^^; 大きく見るとひと塊のものを+で2つ並べているだけなので左側の塊が先になりそう。 で、左側の文字列の添え字部分が先に実行されるのでLEN()が先になる筈。よってSHIFT()でF$配列の要素数が0になる前のラス1状態を判定したら良い、と思っていたら残念な結果にw 普通は、一旦別の変数にいれますが、今回は一画面に納めたかったので全体的に詰め込み型のコーディングでw それと面白い現象だったでそのまま残しましたw 0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿Oskar oskar_liebig2015/3/24 0:26SmileBASIC がどうかは知りませんが、式のどの項が先に評価されるかに頼ったプログラムを実行すると「鼻から悪魔」が出ても文句を言えない言語もあるようです。0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿けい kei0baisoku2015/3/24 1:05>Godotさん 整理すると論点は「+演算子の左と右のどちらが先に評価されるか」の一点ですね。 C言語だと左からと保障されてますが、言語によって異なると思います。 で、SmileBasicがどうなってるか公式サイトの言語仕様ページを確認してみましたが、何も触れてませんでした。 ということはつまり、どちらが先に評価されるかは分からない、となりますね……… (右からとも限らず、実行する度に変わるかもしれない) スマイルブームさんに質問して確証が取れない限りは、素直に分けて書いた方が良さそうです(´ω`)0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿Godot orz_1272015/3/24 19:18>Oskarさん そうですよね。 色々な実装があります。 普通と同じに*/+-の演算子があるのでそれなりの優先順位があるものと思っていたら実は演算子に優先順位などない、優先順位をつけたければ()で括れというものも。 確かHSPの前のバージョンがそうでした。 他言語への移植性や判り易さを考えると今は()が不要とわかって居てもあえて()で括れって感じですよね^^ 0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿Godot orz_1272015/3/24 19:41>けいさん 単に+の左右の問題ではなさそうです^^ 本題と違う話が長くなってきたのでこの件は別で投稿しますw あとC言語と言っても準拠の度合いやプリプロセッサやコンパイラの実装の仕方によって色々だと思います。 あまりC言語だからと過信するとあぶないかもです^^; 0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[11]親投稿けい kei0baisoku2015/3/24 22:38>Godotさん お、それは興味深いです。ラジャーです(`・ω・´)\ Cの演算子前後の評価順、不安になって再度調べてみましたが、やはり「C言語」と言う名前であるなら、演算子前後の評価順は言語仕様として厳密に決まっているように見受けられました(?ω?) ※どちらにせよ、評価順仕様に頼ったようなコードは可読性や保守性が落ちるので避けた方が良いですが。 ちなみに、関数の引数の評価順や++の実行タイミングは未定義と明言されてます。 プチコン3号だと、+やANDや=等については評価順の定義はありませんが、&&と||に関しては明記されてますね。 (評価順は左からで、途中で論理式全体の結果が確定したらそれより右は評価すらされない)0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[12]親投稿べー mmmggg2015/3/25 1:51すごく横道なんですが、C言語には優先順位と結合規則は厳密ですが評価順序は、ほぼ決まってません 優先順位と結合規則が厳密というのは 例えば A()+B()+C()+D() の真ん中の+オペレータには「A()+B()」と「C()」の評価結果がオペランドとして渡されるということのみが保証されています なのでこの4つの関数がどれから実行されるかは決まってません …ホント横道ですいません1そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[13]親投稿Godot orz_1272015/3/25 12:23>けいさん 最近のISOやANSIだったらそれなりに規格化されているようですがK&Rの時代は演算子の優先順位くらいはあったとは思いますが、割りと混沌としていて実装によってさまざまだった気が。 ポケコンに別売りの拡張ROMをつけて動かすC言語のインタープリターとか割りと怪しい動きをしていた記憶がw いまでも何々準拠を唱っていればとりあえず安心ですが、個人が作って見ました的なものやマイナーなC言語だと何処までどう動くか不安です。 以前といっても大昔、C++が出始めた頃、そのハード様のネイティブなC++のコンパイラがなかったのでMakeするとプリプリプロセッサ的な物が動いて一旦C言語にコンバートしてからコンパイルされるC++がありました。 そいつは&&でも一旦全部評価してしまう仕様だったので、はまりかけたことがありますw0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[14]親投稿Godot orz_1272015/3/25 12:31>べーさん 横道でもなんでも関連する情報を頂けるのはありがたいです。 たまに全く無関係なコメントをのこしてる人もみかけますがw 別投稿で書いていますがプチコン3は関数に限らず演算子で区切った項を右からリテラルになるまで評価し、その後で演算子順で処理している様です。0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[15]親投稿けい kei0baisoku2015/3/25 14:27>べーさん、Godotさん ありがとうございます!(^O^) 自分ではトリッキーな書き方は避けると言っても、他の人の書いたものを見たり修正したりすることは多々あり、ルールがあるのかないのか自体が不明なのは不安だったので大変助かります。 最近のちゃんとした環境だとルール化されてるかも知れないけど、Cの言語仕様としては未定義なのですね。 で、私が「決まってるように見える」と言った資料いくつかを再度確認したのですが………評価順ではなく結合順の情報だったのを、私が読み違えてました(´Д`) お騒がせ致しました。大変申し訳ないです。 a+b+c → (a+b)+c ***p → *(*(*p)) ご覧になった方の参考になったかもしれないという事で、ご容赦頂ければと思います………m(__;)m0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[16]親投稿Godot orz_1272015/3/27 23:16トリッキーな書き方はどちらかと言うと遊びですね^^ 普通に普段のプログラムでそれをやってしまうと後でわからなくなったりw どうも人のプログラムは読みにくいのでつい自分の読みやすいように書き換えてしまいます^^;0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[17]親投稿けい kei0baisoku2015/3/28 0:09変えていいプログラムは読みやすいように整理するの、わたしもよくやります(^^; よく考えると私、仕事以外でプログラム組んだのがこのプチコン3号が初めてでした。 なので、趣味だから別にいいと頭で分かっていても、トリッキーな書き方とかはどうしても本能が拒んでしまいます……(´Д`)0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[18]親投稿Godot orz_1272015/3/28 11:03>けいさん JavaScriptとかOKですか? 技術評論社から 『プログラマのためのコードパズル ~JavaScriptで挑むコードゴルフとアルゴリズム』柳井政和[著]と言う本がでています。 面白いかもです。 自分は買ったけど積読状態ですがw0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[19]親投稿けい kei0baisoku2015/3/28 13:30JavaScriptですか。たしか数回使ったことがある程度だったと思いますが、ソース見て何となく理解くらいはできると思います。 ほほう、コードパズル?(´ω`) 書店で探して見てみようかな………ありがとうございます(^O^)0そうだね プレイ済み2017/11/03 22:42:23に取得
プチコン3号 SmileBASIC コミュニティ返信[20]親投稿けい kei0baisoku2015/3/28 19:04コードパズルの本、見てみました(^O^) 書店で見つけましたが買ってもきちんと時間取って読まないだろうと考え、書店で最初と途中だけ集中して(^^; なるほどこういう感じなのですね。最終的に短くなったソース見て、思わずコアさんとおちゃめさんを連想しました(^O^;) 仕様を利用した省略形は実際に作るときにはあまり使わないかもしれませんが、アルゴリズムや組み方の工夫や別案は、遊びの範囲にとどまらずスキルにも直結しそうで、なかなか興味深いです。 プログラムって、何かを作る「手段」と、それ自体が楽しくて「プログラミング自体が目的」の2つの面があると思ってますが、この本は徹底して後者にフォーカスしてますね。意外と珍しいかもと思いました。 私はプログラム自体も好きなもののドライに前者の考え方だったのですが、このコミュに来て後者の考え方でプログラムを楽しんでいる方が多く、とても新鮮です(^O^)0そうだね プレイ済み2017/11/03 22:42:23に取得