2019年1月12日土曜日

Juliaにおける変数のスコープ

2つのソートされた配列を比較する練習問題プログラムを実行しようとしてひっかかった。

#3 function main()
  a=sort(rand(1:100,30))
  b=sort(rand(1:100,30))
  j=1
  k=1
  while j<=30 && k<=30
#2  global j
    if a[j] > b[k]
#1    j=j+0
      k=k+1
    elseif a[j] < b[k]
      j=j+1
    else
      println((j,a[j],k,b[k]))
      j=j+1
      k=k+1
    end
  end
#3 end
#3 main()

UndefVarError: j not defined

Stacktrace:
 [1] top-level scope at ./In[25]:8

Whileの中の変数 j が未定義だというエラーである。調べてみると,これが Julia 1.0の仕様であるらしい。そこで,上記のプログラムにおいて,コメント#1,#2,#3をのいずれかをはずすとエラーは回避された。

このあたりの Scope of Variables をちゃんと読んでおけということですね。




0 件のコメント: