
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで変数中のエスケープされ...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
エクセルシート名の制限を変更...
-
ピクセル,dpiから容量(バイト...
-
COBOLのCOMP形式について
-
Excel VBA メール作成について ...
-
Excel 1セル当りの文字数が2...
-
Javaで日本語1文字のバイト数
-
機種依存文字をチェックしたい。
-
「1TB」のHDDに日本語は何字入...
-
バイト列とバイナリ列の違いが...
-
htmlソース編集で、各タグを何...
-
C++ Builderで文字列をバイトに...
-
char str[256]の256の意味は?
-
JavaScriptの条件分岐について(...
-
PHPのCookieが有るか無いかで、...
-
3バイト文字(UTF-8)をprintfで...
-
ListView重複データ削除
-
大至急!! メモ帳でホームペ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonにCでのexternはありますか
-
Excel操作で「コンポ-ネントが...
-
マクロの書き換え箇所がわかり...
-
Perlで変数中のエスケープされ...
-
チェックボックスのvalue値の取...
-
多元配列の0初期化
-
VBScriptでカレントディレクト...
-
python 3.10で 同じlistに同じ...
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
Excel 1セル当りの文字数が2...
-
COBOLのCOMP形式について
-
Excel VBA メール作成について ...
-
DataGridViewの特定列に入力さ...
-
char str[256]の256の意味は?
-
ビットスワップとバイトスワッ...
-
ピクセル,dpiから容量(バイト...
-
「1TB」のHDDに日本語は何字入...
-
機種依存文字をチェックしたい。
おすすめ情報