どのようにしてhaskellのリストの最後の要素を得るのですか?私は以下のコードの一部を書いています:再帰を使ってhaskellのリストの最後の要素を返す
組み込み関数を使用しないでどのようにしますか?あなただけの要素がEmpty
と短所であるときチェックする必要
どのようにしてhaskellのリストの最後の要素を得るのですか?私は以下のコードの一部を書いています:再帰を使ってhaskellのリストの最後の要素を返す
組み込み関数を使用しないでどのようにしますか?あなただけの要素がEmpty
と短所であるときチェックする必要
:
lastList :: List a -> a
lastList lst =
case lst of
Cons x Empty -> x
Cons _ xs -> lastList xs
Empty -> error "lastList of empty list"
Cons
は、リストがリンクリストとして表現されたリストのようなLispのです。各Cons h t
は、h
がそのノード(要素)のヘッドを参照するノードであり、リストのt
からテール:残りを参照するノードです。さらに、リストの最後(空のリスト)はEmpty
で表されます。
だから、一つの要素x
とリスト(これは[x]
と等価である)Cons x Empty
として表現されることを意味します。これに遭遇した場合は、x
を返す必要があります。これは、1つの要素を持つリストの最後の要素がその要素だからです。
Cons h t
の場合はどうすればよいですか。t
はEmpty
ではありません。その場合、リストは[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"
。あなたはたぶん最後の要素を得るでしょう! – user2847643
組み込み関数 'error'の使用は心配ですか? –