裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

セイウチ演算子(:=)って今更...(その2)

2021年01月17日 | ブログラミング

いやあ,うっかりしてたわ。

R でセイウチ演算子での代入箇所に複文が書けるって書いていたのに,Julia のこと書かなかったわ。

Julia では,複文は begin 〜 end で囲むので次の様にして,複文を書くことができる。

どんなに複雑な式を何個書いても問題ない。

が,もっとも大事な注意があることを書いてなかったわ。

a = [1,2,3,4,5]
if begin n = length(a); w=20*pi end > 10
    println("List is too long ($n elements, expected <= 10)")
else
    println("variable n is $n, w = $w")
end
println(n, ", ", w)

List is too long (5 elements, expected <= 10), w = 62.83185307179586
5, 62.83185307179586

おや,5 elements, expected <= 10 になってますよ。

あわてちゃいけない。複文の評価は,最後の文の評価結果なの!!つまり, w > 10 をやったことになってるの。

位置を考えるか,最後に n を置くか。以下のようにする。

if begin n = length(a); w=20*pi; n end > 10

==========

R も同じ。n > 10 をやりたいなら,複文の最後に n を置く

a = c(1,2,3,4,5)
if ({n = length(a); w = 20*pi; n} > 10) {
    cat(sprintf("List is too long (%d elements, expected <= 10), w = %f\n", n, w))
} else {
    cat(sprintf("variable n is %d, w = %f\n", n, w))
}
cat(n, w)

variable n is 5, w = 62.831853
> cat(n, w)
5 62.83185

 

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« セイウチ演算子(:=)って今更... | トップ | Julia で微分 »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事