2017-08-18 4 views
1

どのようにしてhaskellのリストの最後の要素を得るのですか?私は以下のコードの一部を書いています:再帰を使ってhaskellのリストの最後の要素を返す

組み込み関数を使用しないでどのようにしますか?あなただけの要素がEmptyと短所であるときチェックする必要

+1

。あなたはたぶん最後の要素を得るでしょう! – user2847643

+0

組み込み関数 'error'の使用は心配ですか? –

答えて

7

lastList :: List a -> a 
lastList lst = 
    case lst of 
     Cons x Empty -> x 
     Cons _ xs -> lastList xs 
     Empty  -> error "lastList of empty list" 
3

Consは、リストがリンクリストとして表現されたリストのようなLispのです。各Cons h tは、hがそのノード(要素)のヘッドを参照するノードであり、リストのtからテール:残りを参照するノードです。さらに、リストの最後(空のリスト)はEmptyで表されます。

だから、一つの要素xリスト(これは[x]と等価である)Cons x Emptyとして表現されることを意味します。これに遭遇した場合は、xを返す必要があります。これは、1つの要素を持つリストの最後の要素がその要素だからです。

Cons h tの場合はどうすればよいですか。tEmptyではありません。その場合、リストは[x1,x2,...]のようになります。そのリストの最後の要素は[x2,x3,...]リストの最後の要素と同じになります。そのため、末尾に再帰を使用できます。

最後に、関数に空のリストを提供する場合を解決する方法を見つける必要があります。その場合は、おそらくerrorを提供する方が良いでしょう。

ようなので、我々はそれを実装することができます:あなたはない

lastList :: List a -> a 
lastList (Cons h Empty) = h 
lastList (Cons _ t) = lastList t 
lastList Empty = error "An empty list has no lastElement" 
関連する問題