7

Haskell (および一般的な関数型プログラミング) は初めてで、コンス(:) 演算子を使用してリストに追加した新しい要素にどのようにアクセスできるのか疑問に思っていましたか?

たとえば、WinGHCiを使用して新しいリストを作成し、最初の要素にアクセスします。

ghci> let a = [1,2,3]
ghci> a!!0
1

プロンプトは、最初の要素 Cool の値である 1 を返します。ここで、リストの前に新しい値を追加して、それにアクセスしようとします。

ghci> 5:a
[5,1,2,3]
ghci> a!!0
1

リスト アイテムのインデックスが再作成されないようです。負のインデックスを機能させたり、その他のことを試みましたが、コンパイラーは承認しなかったようです。私が読んでいるチュートリアルはそれをスキップするだけで、オンラインで役立つものは何も見つかりませんでした. リストから値「5」を取得するにはどうすればよいですか?

助けてくれてありがとう。これが非常に基本的な質問である場合は申し訳ありません。

4

4 に答える 4

7

あなたの誤解は根本的なものです:短所は何も破壊的に変更しません。

5:a(ここでa = [1,2,3])はに評価され[5,1,2,3]、それがインタプリタが表示しているものです。

于 2012-02-28T17:37:30.937 に答える
6

(+) と (:) で説明します。

Prelude> 4+5
9
Prelude> let z = 5
Prelude> z
5
Prelude> 4+z
9
Prelude> z
5
Prelude> let y = 4+z
Prelude> y
9
Prelude> z
5

Prelude> let a = [1,2,3]
Prelude> a
[1,2,3]
Prelude> 5:a
[5,1,2,3]
Prelude> a
[1,2,3]
Prelude> let b = 5:a
Prelude> b
[5,1,2,3]
Prelude> a
[1,2,3]

'let' で作成されたバインドは決して変更されませんが、新しいバインドを作成できます。新しいバインディングが古いバインディングと同じ名前の場合、古いバインディングは変更されずに「シャドウ」されます。

于 2012-02-28T17:56:28.653 に答える