![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
No.1ベストアンサー
- 回答日時:
このプログラムは、おそらく期待通りの動きをしません。
ここに書かれた通りならプログラムが間違っています。あなたが入力したのなら、入力間違いしていると思われます。
使われている命令自体は、Perlの基礎です。
なので、個々の命令については理解はできているものとして、解説はしません。
「連結リスト」という、データ構造は理解できてますか?
それを、このプログラムではどうやって実現させてますか?ハッシュ?クラス?リスト(データ構造としての連結リストではなく、Perlの機能としての)?
$old = A→B→C→D→undef(終端判別用)
となっているリストを
$new = D→C→B→A→undef
にして、$newを返す、というのが期待される動作だと思われます。
ここで「→」は A->NEXT = B となっていることを表現しています。
my&new=undef; は my $new=undef; の間違いでは。
連結リストにハッシュが使われているなら {'NEXT'} 等と{}を使います。
リストが使われているなら、どこかで use constant NEXT=>1 などとNEXTに値を設定しているはずです。
どちらが正しいか、あるいは、これ以外なのか、確認してください。
動作がわからないなら、コンピュータになったつもりで、自分で実際に実行してみましょう。
・初期状態
undef($new)
A($old)→B→C→D→undef
・whileループ
A($cur,$old)→B→C→D→undef
・$oldを次の位置へ
A($cur)→B($old)→C→D→undef
・$curの矢印を$newへ変更
undef($new)←A($cur) / B($old)→C→D→undef
・$newを変更: これが提示されてるプログラムに抜けている
undef←A($cur, $new) / B($old)→C→D→undef
・whileの次のループ
undef←A($new) / B($cur, $old)→C→D→undef
・$oldを次の位置へ
undef←A($new) / B($cur)→C($old)→D→undef
・$curの矢印を$newへ変更
undef←A($new) ← B($cur) / C($old)→D→undef
・$newを変更
undef←A ← B($cur, $new) / C($old)→D→undef
以下同様。最終的に
undef←A ← B← C ←D($new) / undef($cur, $new)
でwhileの条件が偽→終了
No.2
- 回答日時:
## 私も初心者でここでお世話になっていますので恩返しです。
## 私のわかる範囲で書いてみました。参考になれば幸いです。
sub list_reverce{ ##サブルーチンの名称は list_reverce だよ、と言う意味
my $old=shift; ## 変数$oldをmy で宣言するとともに 引数からshift関数で代入している
my&new=undef; ## なぞ? my $new=undef;のタイプミス(typoという)か?ならば変数$newを宣言し未定義値undefを代入し明示的に未定義にしている
while (my $cur=$old){ ## $curが$oldの間処理を繰り返す
$old=$old‐>[NEXT]; ## 先ほどのshiftした引数はリファレンスなのですね、そのリファレンスをデリファレンスした配列のNEXT番目を$oldに代入
$cur‐>[NEXT]=$new; ## $newを$curをデリファレンスした配列のNEXT番目に$newを代入
}
return $new ## $newが戻り値
}
## 全体を見ないと[NEXT]と言うのがよくわかりません。
## 以上私のわかる範囲で書いてみました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 高校英語の問題 1 2023/05/23 15:29
- 英語 この英語の意味わかる人いませんか? 1 2022/04/09 13:39
- 英語 英語の問題でどう解いたらよいか分からないものがあります。教えていただけませんか?接続詞の単元です。 2 2023/06/18 15:45
- 戸籍・住民票・身分証明書 今日はJAにブロックしてフラれ 2 2022/05/28 09:01
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- 英語 私の車は、購入してから7年目になるが、これまでに車検を3回受けた。の英訳 11 2022/06/13 03:39
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- 英語 【英語】 新しい職場の人と仲良くできるか心配です。 ①I'm worried I won't get 4 2022/06/26 21:19
- Visual Basic(VBA) FileSearch2007に変わる構文について 1 2022/12/16 16:57
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのflock関数でロックをかけ...
-
perlのrequireの動き方について...
-
perl 正規表現でエラー
-
perl LWPでURLにアクセスした時...
-
PerlでUTF-8のファイルの文字列...
-
perl 初等プログラミングについて
-
AI sisterとは、偽物の人ですか?
-
Perlで時間の計算
-
perlの構文でカンマの意味が分...
-
テキストファイルで提出とは?
-
arduino の割り込み処理について
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
perlについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonにCでのexternはありますか
-
@color1 = ('0000ae',・・・,'$...
-
マクロの書き換え箇所がわかり...
-
チェックボックスのvalue値の取...
-
VB2010での連立方程式の計算
-
配列へのポインタの代入
-
Perlで変数中のエスケープされ...
-
高校数学のベーシック
-
なぜかわかりませんscanf()の戻...
-
変数内の文字の数
-
格子運動の連立同次方程式
-
代入方法
-
多元配列の0初期化
-
perlのプログラミングについて
-
なぜ?
-
算術演算子
-
$template->output();の時に ...
-
漢字交じり文字列からのlocalti...
-
VC6++ char配列の文字列をシリ...
-
UWSCにおける変数の扱い方
おすすめ情報