2016-03-29 6 views
-2

私は機能haskellの(_:xs)表記法とは何ですか?

last_element :: [a] -> a 
last_element (_:xs)= last_element xs 

を参照してください、私はにアンダーコロン理解していない "(​​_:XS)" を。私はそれが入力されたリストから頭を分離することを読んだ。アンダースコアのコロンは、プリミティブな再帰的な方法でリストの最初の桁または「先頭」を削除するだけですか?

編集、私の理解から、この機能は基本的なケースが欠けています。これは正しいですか?

答えて

1

下線はパターンマッチングを可能にしますが、実際には値を使用しないことを意味します。あなたのパターンマッチングは網羅的ではないので、実際には動作しません。あなたはそれを修正するために欠けているパターンを定義する必要があります:

last_element :: [a] -> a 
last_element [] = error "Empty List" 
last_element [x] = x 
last_element (_:xs)= last_element xs 
+1

OPの例はベースケースを欠いています。 – gallais

+0

これは、コロンなしでアンダースコアを使用する方法とはどのように違いますか?私は、(Int、String)、(_ "hello")だけでパターンマッチングを行うことができると信じていますか? –

+0

コロンは[cons](https://en.wikipedia.org/wiki/Cons)演算子です。 '(x:xs)'はリストの最初の項目を 'x'、リストの残りの部分を' xs'とマッチさせます。関数はリストの最初の項目を使用しないので、アンダースコアを使用して関数を無視します。 –

関連する問題