みなさまこんにちわ。
Perl未熟者 kokucho81です。

範囲演算子で、
@_=(0.5..3.5); とやって、

print @_;
とやると、勝手に整数になっているのですけど。。。
なんで?

わたしの持っている全ての参考書には、
最初の値から1づつ増やしていって、最後の値を超えない値までのリスト値を持つ、
という趣旨はかいてありますが、勝手に整数に丸めるなどと書いてある本はないのですが・・・

こういう感じで少数を配列で持つときは、どうエレガントに持てばよいのでしょうか?
どうもあちこちPerlの挙動がわからんです。

A 回答 (2件)

最後ですねえ。

結局なにもせずに終わった…。
ひとつ気になったところが。

> 「( )のリストは整数のリストになる」

きっと書き間違いでしょうけど、これは違いますね。
@A = (0.123, 0.4, 1.2, 3.1111);
print join(',', @A), "\n";
別に整数に丸め込まれることはありません。
0.5から1ずつ増える、などというルールに従わないデータはこうして
列挙するしかないでしょう。実際には、このような数値を扱うときって
ファイルから読みこんだりするんでしょうけど、そのときにも普通
整数に丸め込まれたりはしませんよね。

あくまでも演算子..のはたらきによって丸められてしまうのです。

# いや、コメントを書け、と言われたので変だなあと思いながらとりあえず…。

この回答への補足

> 「( )のリストは整数のリストになる」
そ、そうですね、おっしゃる通りで、これでは意味が違っちゃって
( )が丸めているような意味になってしまってますね...
(今回とりあげた( )中のような..演算子のリストは整数のリストに
なるという意味だったのですが、実はわたしも 補足 したあと、
「あっ(= =;) あ~ まじったかな」っとは思ってたのです...)

「..」の範囲演算子でのリストでは~ とすべきでした。

たびたびありがとうございました!

>結局なにもせずに終わった…。
そ、そうですか。。 (πーπ) (でも、似たものみっけて ホ♪)

補足日時:2001/05/06 19:02
    • good
    • 0

確かにperldoc perlopでも整数にまるめることは書いてありませんね。


ただ、「it returns an array of values counting (up by ones)」
countingとなっていて、数え上げのための演算子であることは
ほのめかされています。配列の添え字に使うと便利だよ、ともあります。
配列の添え字も整数に丸められますね。
@A = ('a', 'b', 'c');
print $A[1.5], "\n";
の結果はb、すなわち$A[1]といっしょになります。

配列の添え字に使うたぐいはみな整数にまとめられると覚えるしか
ないように思います。範囲演算子の「範囲」とは、実数空間での
範囲ではなく、配列内の範囲と思ったほうがいいんじゃないでしょうか。

例えば 0.5, 1.5, 2.5 ...99.5を生成したいのでしたら、いろいろ
書き方はあるでしょうが例えば
for (0 .. 99) {
push(@_, $_+0.5);
}
とか
@_ = map {$_ + 0.5} (0 .. 99);
とか、
$a = 0.5;
push(@_, $a++) while ($a < 100);
とか書くことになるんじゃないでしょうか。

この回答への補足

Head_Syndicateさん、こんにちわ。
さっそくのご返答ありがとうございます!

ゴールデンウィークも最後の日ですね~。

さて、、、
やはり理屈抜きで、素直に、「( )のリストは整数のリストになる」と
覚えてしまった方がよさそうでしょうか。。。

            ・
            ・
            ・

私もいままでは制御構造でぐるぐる回してやっていましたが、いまいちで…

(2)
@_ = map {$_ + 0.5} (0 .. 99);
これいいですね。

ところで、Head_Syndicateさん。
自己紹介のコメント面白かったです(^ ^;)

補足日時:2001/05/06 04:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ