なでしこ3のからまで繰り返す

5 views
Skip to first unread message

うぇいく

unread,
Sep 22, 2017, 8:21:45 AM9/22/17
to 日本語プログラミング言語「なでしこ」開発
なでしこ3のからまで繰り返すの、genを以下のようにしてみたのですが、いかがでしょうか。

  convFor (node) {
    const kara = this.convGen(node.from)
    const made = this.convGen(node.to)
    const block = this.convGenLoop(node.block)
    let word = ''
    let varCode = ''
    if (node.word !== null) {
      word = this.convGen(node.word)
      varCode = ''
    } else {
      // ループ変数を省略した時は、自動で生成する
      const id = this.loop_id++
      word = `$nako_i${id}`
      varCode = 'let '
    }
    const id_f = this.loop_id++
    const id_l = this.loop_id++
    const code =
      `const $nako_from${id_f}=${kara};` + '\n' +
      `const $nako_to${id_l}=${made};` + '\n' +
      `if($nako_from${id_f}<=$nako_to${id_l}){` + '\n' +
      `  for(${varCode}${word}=$nako_from${id_f}; ${word}<=$nako_to${id_l}; ${word}++)` + '{\n' +
      `    ${this.sore} = ${word};` + '\n' +
      '    ' + block + '\n' +
      '  };\n' +
      '}else{\n' +
      `  for(${varCode}${word}=$nako_from${id_f}; ${word}>=$nako_to${id_l}; ${word}--)` + '{\n' +
      `    ${this.sore} = ${word};` + '\n' +
      '    ' + block + '\n' +
      '  };\n' +
      '};\n'
    return this.convLineno(node) + code
  }

降順にも対応になる代わりに、命令が結構増えてしまうので、元の日本語の命令そのものを分けたほうが良いのかもしれません。
(もしくは、「づつ」を追加するとか)

酒徳峰章

unread,
Sep 25, 2017, 9:13:50 AM9/25/17
to 日本語プログラミング言語「なでしこ」開発
うぇいくさん、以下の修正点もありがとうございます。
そうですね、繰り返すで、大小逆でも動くようにしたいですね。修正内容に感謝です!
これから、コミットします。

2017年9月22日金曜日 21時21分45秒 UTC+9 うぇいく:
Reply all
Reply to author
Forward
0 new messages