Perlコーディング初心者質問スレ Part 55
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2007/05/30(水) 11:34:01ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc11.2ch.net/test/read.cgi/php/1171102883/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0984nobodyさん
2007/09/16(日) 14:27:19ID:???挙動は変らんよ。与えられたリストを全部もってく。
print root 3,4,5, print q{hoge} ;
なんてマネしたら当然1 が返る(sort の行をきちんと機能させた場合)
がそれは、
print &root( 3,4,5, print q{hoge}) ;
と同じわけで本来の挙動だ。
お前さんが prototype の事を質問しているのだとしたら全く別の話。
0985nobodyさん
2007/09/16(日) 14:35:03ID:???http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod
> 括弧を使うときには、単純な (しかし、ときには驚く結果となる)
> 規則が適用できます: 関数に見えるならば、それは関数で、
> 優先順位は関係ありません。
0986nobodyさん
2007/09/16(日) 14:42:55ID:???コーディングとちょっと違うかもしれませんがお願いします。
test.plを実行すると自分のパソコンのスペックで15分くらいかかります。
ファイル操作とか何もしない、コード内完結型?のコードなので、処理をさせてる間
他の作業をパソコンでしたいのです。
簡単に言うとtest.plの完遂を待ってる時間に2ちゃんねるでもして暇をつぶしたいのです。
なので30分かかってもいいので、test.plのCPUやメモリの最大使用率を通常の1/2にしたいのです。
可能でしょうか?
0987963
2007/09/16(日) 15:21:39ID:???う〜ん。なんか伝わってないような。
例えばsort関数が何をしているか視覚化して初心者に説明しなさい。
ってな時にsort関数のコードを渡せば自動で視覚化してくれるモジュールがあればなってことです。
自分でsort関数と同じ関数を作って、そこにごちゃごちゃと視覚化のためのコードを書くのは、
簡単な関数の時にしか「簡単じゃん」とは思えないですよね?
いや、簡単だというならsort関数の視覚化をこの場でやってもらえればいいんですけどね。
my @col = (4,6,2,98,2,1345,22);
この配列をsort関数がどういう手順でどういう事をしてるかを目で見えるようにするコードを「簡単に」どうぞ。
0989nobodyさん
2007/09/16(日) 17:10:58ID:???for (1..100){ push @array,$_ }
@array = sort {$a<=>$b} @array;
my $tr = (@array * (1-0.68)/2);
print $tr;
print "\n";
splice @array,0,$tr;
splice @array,-$tr;
print "@array";
このコードですが、$trを表示すると16になります。
しかし$trをintすると15になります。
さらに、spliceに使われてる$trもどうも15として動いてるようです。
15.999999999という状態になっているのか。
こんな事があるなんておもいませんでした。
print すると整数のみなのに、実際は小数付きの数字という事は常に想定しておかないといけないことなのでしょうか?
print "\n\n";
print ($tr != 16);
をすれば1と表示されます。だからそんなに問題はない?
でもなんか混乱しています。何故こんなことになってるのでしょうか?
0992nobodyさん
2007/09/16(日) 17:33:39ID:???すまんが、
ttp://corn.2ch.net/php/kako/988/988728069.html
の5〜10嫁。
0993nobodyさん
2007/09/16(日) 17:51:31ID:rriFOokp別ファイルにまとめておきたいのですが、
どのような仕組みにすればいいのでしょうか。
例えばconf.pmに変数として$path=/home/...;
などと書いて、スクリプト本体でrequireしてprint $path;としてもダメですよね・・・
ダメダメな質問ですみませんが、お願いします。
0994nobodyさん
2007/09/16(日) 17:53:04ID:???すいませんでした。
use Math::BigFloat;
my @array;
for (1..100){ push @array,$_ }
@array = sort {$a<=>$b} @array;
my $tr = Math::BigFloat->new((@array * (1-0.68)/2));
print $tr;
print "\n";
splice @array,0,$tr;
splice @array,-$tr;
print "@array";
としましたら表示が16で、動作も16になってくれました。
これって結構重要なことですよね。
乱数とかを扱う場合特にちょっとした誤差でとんでもない違いが生まれてしまいますし。
で、一体なんなんです?
15.99999999になってるのは別にいいんです。比較でもちゃんと!=16で真出しますし。
なんでprintでは勝手に四捨五入されてしまう?のでしょうか。
誤差が気になるよりもprintでの表示が違う事の方が気になります。
0995nobodyさん
2007/09/16(日) 17:58:04ID:???誤差が怖い時は常にbigfloatに入れて使っておけばいいんですかね。
0996nobodyさん
2007/09/16(日) 19:33:23ID:???ここで質問しても流されそうですが・・・
一応してみます。回答お願いしますm(__)m
@test[-10]の本来のインデックス番号?って簡単にわかりますか?
spliceしないで、頭10番目から末尾10番目を得たいんです。
ごちゃごちゃしないと無理ならspliceでもいいんですけれど。
0997nobodyさん
2007/09/16(日) 19:52:40ID:???ttp://pc11.2ch.net/test/read.cgi/php/1189939783/
0998nobodyさん
2007/09/16(日) 19:57:31ID:???初心者にもほどがあるってレベルなんだけど、釣りなのか?
本気なら、もう少し本なり入門サイトなり見てから質問してくれよ
0999nobodyさん
2007/09/16(日) 20:01:49ID:???my $tr = Math::BigFloat->new((@array * (1-0.68)/2));
と書くの大変なので
my $a = use Math::BigFloat;
my $tr = $a->new((@array * (1-0.68)/2));
と書いてみましたがエラーでした。
こういう意図を実現するのは無理ですか?
小数の計算をさせた上で配列のインデックスにする場合はBigfloatしておかないと危ないです。
やってない$trに
$array[-($tr +1)];
とすると実質インデックスが2個変わってしまいます。
15.999だったのが、+で16になり、さらに1が足されて17になる。
そんな現象を確認しました。
簡単な記述方法はないでしょうか。
1000nobodyさん
2007/09/16(日) 20:07:07ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。