プログラミング言語「ドリトル」

大阪電気通信大学 兼宗研究室

ユーザ用ツール

サイト用ツール


dncl

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
最新リビジョン 両方とも次のリビジョン
dncl [2018/08/12 16:34]
klab
dncl [2020/01/21 07:01]
klab
ライン 4: ライン 4:
   * アルゴリズムの記述に適しています。   * アルゴリズムの記述に適しています。
   * オンラインで利用できる他、ダウンロードしてローカルで利用できます。   * オンラインで利用できる他、ダウンロードしてローカルで利用できます。
-{{ :​toy_yajirobee.png?​200| +  * 大阪電気通信大学 兼宗研究室(本多佑希、長瀧寛之、兼宗進)で開発を進めています。 
-}}+{{ :​toy_yajirobee.png?​200|}}
 ## 使い方 ## 使い方
   * [[http://​klab.eplang.jp/​honda/​dncl/​|オンライン版]]はインストールなしでブラウザで動作します。   * [[http://​klab.eplang.jp/​honda/​dncl/​|オンライン版]]はインストールなしでブラウザで動作します。
ライン 11: ライン 11:
     * Google Chromeで動作を確認しています。     * Google Chromeで動作を確認しています。
   * インストール版は、ダウンロードしてファイルを展開してください。管理者権限は不要です。   * インストール版は、ダウンロードしてファイルを展開してください。管理者権限は不要です。
-    * [[http://kanemune.eplang.jp/_media/dncl-windows180811.zip|Windows用]](約100MB) +    * [[http://jsdolittle.eplang.jp/dist/dncl181010win64.zip|Windows用]](約100MB) 
-    * [[http://kanemune.eplang.jp/_media/dncl-mac180811.zip|Mac用]](約100MB)+    * [[http://jsdolittle.eplang.jp/dist/dncl181010win32.zip|Windows用(32bit)]](約100MB) 
 +    * [[http://​jsdolittle.eplang.jp/​dist/​dncl181010mac.zip|Mac用]](約100MB)
  
 ## 履歴 ## 履歴
-  * 2018/8/11 開発版を公開しました。+  ​* 2018/10/10 開発版V0.2を公開しました。 
 +  ​* 2018/8/11 開発版V0.1を公開しました。([[http://​klab.eplang.jp/​honda/​dncl180812/​|オンライン版]]、[[http://​jsdolittle.eplang.jp/​dist/​dncl-windows180812.zip|Windows用]](約100MB)、[[http://​jsdolittle.eplang.jp/​dist/​dncl-mac180812.zip|Mac用]](約100MB))
  
 # 言語と命令の説明 # 言語と命令の説明
ライン 21: ライン 23:
   * プログラムの中で、「数字、英字、記号、空白」は全角半角(日本語文字と英語文字)を区別せずに使えます。   * プログラムの中で、「数字、英字、記号、空白」は全角半角(日本語文字と英語文字)を区別せずに使えます。
     * 日本語の長音「ー」とマイナス「−」は区別されます。     * 日本語の長音「ー」とマイナス「−」は区別されます。
-    * 掛け算は「*」「*」「×」を使います。+    * 掛け算は「\*」「*」「×」を使います。
     * 割り算は「/​」「/」を使います。(整数の割り算は「÷」、整数の余りは「%」「%」を使います)     * 割り算は「/​」「/」を使います。(整数の割り算は「÷」、整数の余りは「%」「%」を使います)
-    * 大小の比較は「>​」「>」、「>​=」「≧」、「<​」「<」、「<​=」「≦」、「=」「=」「!=」「≠」を使います。+    * 大小の比較は「>​」「>」、「>​=」「≧」、「<​」「<」、「<​ =」「≦」、「=」「=」「!=」「≠」を使います。 
 +    * 論理演算は「かつ」「または」「でない」を使います。 
 +    * 代入は「←」を使います。 
 +  * プログラムの英語表示と編集が可能です。 
 +    * 「DNCL」と「英語表示」を切り替えることで、日本語のDNCL表記とC言語風の表記が変換されます。 
 +      * ※ インデントが自動調整されます。改行位置が変わったり、空白行が無くなったりする可能性があります。 
 +    * 掛け算は「*」を使います。 
 +    * 割り算は「/​」を使います。(整数の割り算は「÷」、整数の余りは「%」を使います) 
 +    * 大小の比較は「>​」、「>​=」、「<​」、「<​ =」、「==」、「!=」を使います。 
 +    * 論理演算は「&&​」「||」「!」を使います。 
 +    * 代入は「=」を使います。 
  
 ===変数=== ===変数===
-変数名は英字(a-z,​A-Z)で始まり、その後に英字、数字、_が続きます。 +変数名は英字(a-z,​A-Z)で始まり、その後に英字、数字、「_」が続きます。 
-変数には「←」で初期値を代入してから使います。 +変数には「←」(英語表示では「=」)で初期値を代入してから使います。 
-配列の場合は後述の「〜のすべての値を〜にする」で初期値を設定してから使うこともできます。 +配列の場合は後述の「〜のすべての値を〜にする(allinit)」で初期値を設定してから使うこともできます。 
-「,​」で区切って複数の代入文を並べられます。+複数の代入文を「,​」で区切って並べられます。
 <​code>​ <​code>​
 x ← 3 x ← 3
ライン 35: ライン 48:
 moji_moji ← "​文字"​ moji_moji ← "​文字"​
 x ← 3, y ← 4 x ← 3, y ← 4
 +</​code>​
 +
 +<​code>​
 +// 英語表示
 +x = 3;
 +Arr = {1, 2, 3};
 +moji_moji = "​文字";​
 +x = 3, y = 4;
 </​code>​ </​code>​
  
ライン 43: ライン 64:
 xを1増やす xを1増やす
 yを50減らす yを50減らす
 +</​code>​
 +
 +<​code>​
 +// 英語表示
 +x += 1;
 +y -= 50;
 </​code>​ </​code>​
  
ライン 52: ライン 79:
 xを表示する xを表示する
 123+456と"​aiueo"​と改行を表示する 123+456と"​aiueo"​と改行を表示する
-"​こんにちは"​改行なしで表示する+"​こんにちは"​改行なしで表示する 
 +</​code>​ 
 + 
 +<​code>​ 
 +// 英語表示 
 +println(x);​ 
 +println(123+456,"​aiueo"​);​ 
 +print("​こんにちは"​);​
 </​code>​ </​code>​
  
ライン 65: ライン 99:
  
 ===四則演算=== ===四則演算===
-+, -, ×, ÷, % を使ます。++, -, ×, - は小数点を考慮した計算を行います。÷, % は整数の計算を行います(商と余り)。英語表示の乗算は\*を使ます。
 <​code>​ <​code>​
 1+2 1+2
ライン 72: ライン 106:
  
 ===比較演算=== ===比較演算===
->, <, ≧, ≦, =, ≠ を使えます。+>, <, ≧, ≦, =, ≠ を使えます。英語表示では >, <, >=, < =, ==, != を使います。
 <​code>​ <​code>​
 1>2 1>2
ライン 79: ライン 113:
  
 ===論理演算=== ===論理演算===
-「かつ」「または」「でない」を使えます。+「かつ」「または」「でない」を使えます。英語表示では &&, ||, ! を使います。
 <​code>​ <​code>​
 1>2 または 2>1 1>2 または 2>1
 1>0 かつ 5>3 でない 1>0 かつ 5>3 でない
 +</​code>​
 +
 +<​code>​
 +// 英語表示
 +1>2 || 2>1
 +!(1>0 && 5>3)
 </​code>​ </​code>​
  
ライン 102: ライン 142:
 配列の要素は、配列名の後に[ ]で囲み添え字を書きます。 配列の要素は、配列名の後に[ ]で囲み添え字を書きます。
 要素は1から始まります。 要素は1から始まります。
-多次元配列は、「,​」で区切って要素を指定します。+多次元配列は、「,​」で区切って要素を指定します。英語表示では[ ]を並べて指定します。
 <​code>​ <​code>​
 x ← Arr[1] x ← Arr[1]
 y ← Arr[1,2] y ← Arr[1,2]
 +</​code>​
 +
 +<​code>​
 +// 英語表示
 +x = Arr[1];
 +y = Arr[1][2];
 </​code>​ </​code>​
  
ライン 111: ライン 157:
 配列の要素の初期値を設定します。 配列の要素の初期値を設定します。
 <​code>​ <​code>​
-    ​Arrのすべての値を0にする+Arrのすべての値を0にする 
 +</​code>​ 
 + 
 +<​code>​ 
 +// 英語表示 
 +allinit(Arr,​ 0);
 </​code>​ </​code>​
  
 ===関数呼び出し=== ===関数呼び出し===
-関数名の後に引数を()で指定します。+関数名の後に引数を()で指定します。英語表示では組込関数は英語名になります。
 <​code>​ <​code>​
 書く() 書く()
 二倍(100) 二倍(100)
 乗算(100,​200) 乗算(100,​200)
 +追加する(Arr,​15)
 +</​code>​
 +
 +<​code>​
 +// 英語表示
 +書く();
 +二倍(100);​
 +乗算(100,​200);​
 +add(Arr,​15);​
 </​code>​ </​code>​
  
ライン 125: ライン 185:
 for文に相当する反復は次のように記述します。 for文に相当する反復は次のように記述します。
 <​code>​ <​code>​
-    ​iを0から10まで1ずつ増やしながら、 +iを0から10まで1ずつ増やしながら、 
-        iを表示する +    iを表示する 
-    を繰り返す +を繰り返す 
-    iを10から0まで1ずつ減らしながら、 + 
-        iを表示する +iを10から0まで1ずつ減らしながら、 
-    を繰り返す+    iを表示する 
 +を繰り返す 
 +</​code>​ 
 + 
 +<​code>​ 
 +// 英語表示 
 +for( i=0 ; i<=10 ; i+=1 ){ 
 +  print(i);​ 
 +
 +for( i=10 ; i>=0 ; i-=1 ){ 
 +  print(i);​ 
 +}
 </​code>​ </​code>​
  
 while文に相当する反復は次のように記述します。 while文に相当する反復は次のように記述します。
 <​code>​ <​code>​
-    ​i←0 +i←0 
-    i<​10の間、 +i<​10の間、 
-        iを表示する +    iを表示する 
-        i←i+1 +    i←i+1 
-    を繰り返す+を繰り返す 
 +</​code>​ 
 + 
 +<​code>​ 
 +// 英語表示 
 +i=0; 
 +while(i<​10){ 
 +  print(i);​ 
 +  i+=1;​ 
 +
 +</​code>​ 
 + 
 +回数を指定した繰り返し文は、次のように記述します。 
 +<​code>​ 
 +i ← 0 
 +ここから5回、 
 +  iを表示する 
 +  iを1増やす 
 +を繰り返す 
 +</​code>​ 
 + 
 +<​code>​ 
 +// 英語表示 
 +i=0; 
 +repeat(5){ 
 +  print(i);​ 
 +  i+=1;​ 
 +}
 </​code>​ </​code>​
  
ライン 145: ライン 243:
 if文に相当する分岐は次のように記述します。 if文に相当する分岐は次のように記述します。
 <​code>​ <​code>​
-    ​もし1≠1ならば +もし1≠1ならば 
-        1を表示する +    1を表示する 
-    を実行し、そうでなくもし2≠2ならば +を実行し、そうでなくもし2≠2ならば 
-        2を表示する +    2を表示する 
-    を実行し、そうでなければ +を実行し、そうでなければ 
-        3を表示する +    3を表示する 
-    を実行する+を実行する 
 +</​code>​ 
 + 
 +<​code>​ 
 +// 英語表示 
 +if(1!=1){ 
 +  print(1);​ 
 +}else if(2!=2){ 
 +  print(2);​ 
 +}else{ 
 +  print(3);​ 
 +}
 </​code>​ </​code>​
  
ライン 159: ライン 268:
 </​code>​ </​code>​
  
 +<​code>​
 +// 英語表示
 +if(1==1) print("​Hello"​);​
 +</​code>​
  
  
ライン 174: ライン 287:
  
 ===配列の要素を入れ替える=== ===配列の要素を入れ替える===
-「入れ替える」は、配列の要素を入れ替えます。+「入れ替える(swap)」は、配列の要素を入れ替えます。
 <​code>​ <​code>​
-    ​Arr ← {"​a","​b","​c"​} +Arr ← {"​a","​b","​c"​} 
-    入れ替える(Arr,​1,​3) // 配列の値は{"​c","​b","​a"​}になる+入れ替える(Arr,​1,​3) // 配列の値は{"​c","​b","​a"​}になる
 </​code>​ </​code>​
  
 ===配列の要素を削除する=== ===配列の要素を削除する===
-「削除」関数は、番号を指定して配列の要素を削除します。+「削除(remove)」関数は、番号を指定して配列の要素を削除します。
 <​code>​ <​code>​
-    ​Arr ← {"​a","​b","​c"​} +Arr ← {"​a","​b","​c"​} 
-    削除(Arr,​2) // 配列の値は{"​a","​c"​}になる+削除(Arr,​2) // 配列の値は{"​a","​c"​}になる
 </​code>​ </​code>​
  
 ===配列に要素を挿入する=== ===配列に要素を挿入する===
-「挿入」関数は、番号を指定して要素を挿入します。+「挿入(insert)」関数は、番号を指定して要素を挿入します。
 <​code>​ <​code>​
-    ​Arr←{"​a","​b","​c"​} +Arr←{"​a","​b","​c"​} 
-    挿入(Arr,"​d",​2) // 配列の値は{"​a","​d","​b","​c"​}になる+挿入(Arr,"​d",​2) // 配列の値は{"​a","​d","​b","​c"​}になる
 </​code>​ </​code>​
  
 ===配列の要素数を取得する=== ===配列の要素数を取得する===
-「要素数」関数は、配列の要素数を取得します。+「要素数(length)」関数は、配列の要素数を取得します。
 <​code>​ <​code>​
-    ​Arr←{"​a","​b","​c"​} +Arr←{"​a","​b","​c"​} 
-    要素数(Arr) // 結果は3が返される+要素数(Arr) // 結果は3が返される
 </​code>​ </​code>​
  
 ===変数の確認=== ===変数の確認===
-プログラムの中で使われている変数の値を確認します。+「確認(dump)」関数は、プログラムの中で使われている変数の値を確認します。
 <​code>​ <​code>​
-    ​Arr ← {1,​2,​3,​4,​5} +Arr ← {1,​2,​3,​4,​5} 
-    x ← 「あいうえお」 +x ← 「あいうえお」 
-    確認()+確認() 
 (出力例) (出力例)
-    ​確認------------------- +確認------------------- 
-    Arr => { 1, 2, 3, 4, 5 } +Arr => { 1, 2, 3, 4, 5 } 
-    x => あいうえお +x => あいうえお 
-    -----------------------+-----------------------
 </​code>​ </​code>​
  
ライン 218: ライン 332:
 ()の中に引数を記述できます。 ()の中に引数を記述できます。
 <​code>​ <​code>​
-    ​あいさつ()は +あいさつ()は 
-        「こんにちは」を表示する +    「こんにちは」を表示する 
-    を実行する +を実行する 
-     + 
-    書く(str)は +書く(str)は 
-        strを表示する +    strを表示する 
-    を実行する+を実行する 
 +</​code>​ 
 + 
 +<​code>​ 
 +// 英語表示 
 +function hello(){ 
 +  print("​hello!"​);​ 
 +
 +function write(str){ 
 +  print(str);​ 
 +}
 </​code>​ </​code>​
  
 次の例は、関数に戻り値を設定します。 次の例は、関数に戻り値を設定します。
 <​code>​ <​code>​
-    ​二倍(num)は +二倍(num)は 
-        num×2を返す +    num×2を返す 
-    を実行する +を実行する 
-    二倍(5)を表示する // 10が表示される+ 
 +二倍(5)を表示する // 10が表示される 
 +</​code>​ 
 + 
 +<​code>​ 
 +// 英語表示 
 +function twice(num){ 
 +  return num*2; 
 +
 +print(twice(5));​
 </​code>​ </​code>​
  
ライン 239: ライン 372:
 以下の内容を測定しています。 以下の内容を測定しています。
   * 実行時間   * 実行時間
-  * 各for文のループ回数+  * 各for文/while文のループ回数
   * 各if文の「条件判定を行った回数」「真が評価された回数」「偽が評価された回数」   * 各if文の「条件判定を行った回数」「真が評価された回数」「偽が評価された回数」
 +  * 各関数の呼出回数
  
 次の例は、関数の性能を測定します。 次の例は、関数の性能を測定します。
 <​code>​ <​code>​
-    ​倍数判定()は +倍数判定()は 
-        xを1から10まで1ずつ増やしながら、 +    xを1から10まで1ずつ増やしながら、 
-            xを改行なしで表示する +        xを改行なしで表示する 
-            もしx%3=0ならば +        もしx%3=0ならば 
-                「<​-3の倍数!」を表示する +            「<​-3の倍数!」を表示する 
-            を実行し、そうでなければ +        を実行し、そうでなければ 
-                改行を表示する +            改行を表示する 
-            を実行する +        を実行する 
-        を繰り返す +    を繰り返す 
-    を実行する +を実行する 
-    倍数判定()の性能を確認する+倍数判定()の性能を確認する 
 +</​code>​ 
 + 
 +<​code>​ 
 +// 英語表示 
 +function is_multiple(){ 
 +  for( x=1 ; x<=10 ; x+=1 ){ 
 +    print(x);​ 
 +    if(x%3==0){ 
 +      println("<​-3の倍数!"​);​ 
 +    }else{ 
 +      println(\n);​ 
 +    } 
 +  } 
 +
 +profile(is_multiple());​ 
 +</​code>​ 
 + 
 +<​code>​
 (出力例) (出力例)
-    ​+
-    +
-    3<​-3の倍数! +3<​-3の倍数! 
-    +
-    +
-    6<​-3の倍数! +6<​-3の倍数! 
-    +
-    +
-    9<​-3の倍数! +9<​-3の倍数! 
-    10 +10 
-    ​性能テスト---------------- +統計情報------------------ 
-    実行時間 ​=> 0.003秒 +(実行時間
-    for1 : 実行回数 ​=> 10 +0.007秒 
-    if1 : 比較回数 => 10, 真の回数 => 3, 偽回数 ​=> 7 +(実行回数
-    --------------------------+for1 : 10 
 +if1 : 比較 10, 真 3, 偽 
 +(呼び出し回数
 +倍数判定 : 1 
 +--------------------------
 </​code>​ </​code>​
  
 次の例は、プログラム全体の性能を確認します。 次の例は、プログラム全体の性能を確認します。
 <​code>​ <​code>​
-    ​倍数判定()は +倍数判定()は 
-        xを1から10まで1ずつ増やしながら、 +    xを1から10まで1ずつ増やしながら、 
-            xを改行なしで表示する +        xを改行なしで表示する 
-            もしx%3=0ならば +        もしx%3=0ならば 
-                「<​-3の倍数!」を表示する +            「<​-3の倍数!」を表示する 
-            を実行し、そうでなければ +        を実行し、そうでなければ 
-                改行を表示する +            改行を表示する 
-            を実行する +        を実行する 
-        を繰り返す +    を繰り返す 
-    を実行する +を実行する 
-    倍数判定() +倍数判定() 
-    倍数判定() +倍数判定() 
-    性能を確認する+性能を確認する 
 +</​code>​ 
 + 
 +<​code>​ 
 +// 英語表示 
 +function is_multiple(){ 
 +  for( x=1 ; x<=10 ; x+=1 ){ 
 +    noNL_print(x);​ 
 +    if(x%3==0){ 
 +      print("<​-3の倍数!"​);​ 
 +    }else{ 
 +      print(\n);​ 
 +    } 
 +  } 
 +
 +is_multiple();​ 
 +is_multiple();​ 
 +performance();​ 
 +</​code>​ 
 + 
 +<​code>​
 (出力例) (出力例)
-    ​+
-    +
-    3<​-3の倍数! +3<​-3の倍数! 
-    +
-    +
-    6<​-3の倍数! +6<​-3の倍数! 
-    +
-    +
-    9<​-3の倍数! +9<​-3の倍数! 
-    10 +10 
-    +
-    +
-    3<​-3の倍数! +3<​-3の倍数! 
-    +
-    +
-    6<​-3の倍数! +6<​-3の倍数! 
-    +
-    +
-    9<​-3の倍数! +9<​-3の倍数! 
-    10 +10 
-    ​性能テスト---------------- +統計情報------------------ 
-    実行時間 ​=> 0.011秒 +(実行時間
-    for1 : 実行回数 ​=> 20 +0.018秒 
-    if1 : 比較回数 => 20, 真の回数 => 6, 偽回数 ​=> 14 +(実行回数
-    --------------------------+for1 : 20 
 +if1 : 比較 20, 真 6, 偽 14 
 +(呼び出し回数
 +倍数判定 : 2 
 +--------------------------
 </​code>​ </​code>​
dncl.txt · 最終更新: 2023/07/11 17:54 by klab