[解決済み] 解釈の仕方 (Eq a)
質問事項
2つのパラメータを持つ関数を作成する必要があります。
Int
と
[Int]
を返す、新しい
[Int]
を削除したものです。
リスト内包でもリスト再帰でも、簡単に関数を作ることができるんだ。しかし、私はこれらのパラメータでそれを行う。
deleteAll_list_comp :: Integer -> [Integer] -> [Integer]
deleteAll_list_rec :: (Integer -> Bool) -> [Integer] -> [Integer]
しかし、私の課題では、必要なパラメータは
deleteAll_list_comp :: (Eq a) => a -> [a] -> [a]
deleteAll_list_rec :: (Eq a) => a -> [a] -> [a]
この構文をどう読めばいいのかわからない。Googleが教えてくれたように
(Eq a)
は単にHaskellに次のように説明しているだけです。
a
は比較可能な型です。しかし、これの意味がよくわからないのは、すべての
Int
は当然比較可能です。このパラメータを使ったメソッドの解釈や実装はどうすればいいのでしょうか?つまり、そもそもパラメータとは一体何なのでしょうか?
グルービー @pelotom
ありがとうございます、これでとても分かりやすくなりました。3つのパラメータを要求しているのに対して、実際には2つのパラメータを要求しているだけだということがわかりました。しかし、私はまだこのコードで問題に遭遇しています。
deleteAll_list_rec :: (Eq a) => a -> [a] -> [a]
delete_list_rec toDelete [] = []
delete_list_rec toDelete (a:as) =
if(toDelete == a) then delete_list_rec toDelete as
else a:(delete_list_rec toDelete as)
これによって、"の型署名が得られます。
deleteAll_list_rec
には、バインディングが含まれていません。私の小さな経験では
(a:as)
はリストとしてカウントされ、そこから最初の要素が抽出されます。これはなぜエラーになるのですか?
deleteAll_list_comp :: (Eq a) => a -> [a] -> [a]
deleteAll_list_comp toDelete ls = [x | x <- ls, toDelete==x]
はないのですか?
2/7/13更新 将来、同じ質問でこの投稿に行き当たるかもしれない人たちのために、Haskell全般と私の質問に関する良い情報をこのリンクで見つけました。 http://learnyouahaskell.com/types-and-typeclasses
<ブロッククオート面白いですね。ここでは新しいもの、=>記号を見ることができます。記号の前はすべて、クラス制約と呼ばれます。等号関数は、同じ型の任意の2つの値を受け取り、Boolを返します。その2つの値の>型は、Eqクラスのメンバでなければなりません(これがクラス制約でした)。
Eq 型クラスは、等質性をテストするためのインタフェースを提供する。その型の2つの値間の等質性をテストすることが意味を持つすべての型は、Eq >クラスのメンバであるべきです。IO(入力と出力を扱う型)と関数を除くすべての標準的な Haskell の型は、Eq 型クラスの一部です。
どのように解決するのですか?
パラメータを考える一つの方法として、以下のようなものが考えられます。
(Eq a) => a -> [a] -> [a]
(Eq a) => means any a's in the function parameters should be members of the
class Eq, which can be evaluated as equal or unequal.*
a -> [a] means the function will have two parameters: (1) an element of
type a, and (2) a list of elements of the same type a (we know that
type a in this case should be a member of class Eq, such as Num or
String).
-> [a] means the function will return a list of elements of the same
type a; and the assignment states that this returned list should
exclude any elements that equal the first function parameter,
toDelete.
(* pelotomのコメントに基づいて編集)
関連
-
[解決済み】haskellでリストを逆順にする
-
[解決済み] 機能における非網羅的なパターン【重複あり
-
[解決済み] Haskell タプルをリスト化する?
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み】Template Haskellの何がそんなに悪いのか?
-
[解決済み】テンプレートHaskellで関連する型の同義語を取得する
-
[解決済み] 制約条件付き特殊化
-
[解決済み] Haskellのマルチコアプログラミングはどうなっているのか?
-
[解決済み] Haskellの "Just "構文とは?
-
[解決済み] Haskell型とデータコンストラクタ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Haskellでの挿入ソート
-
[解決済み] 一般的に `{- |` で始まるHaskellのコメントは何を意味するのですか?
-
[解決済み] 機能における非網羅的なパターン【重複あり
-
[解決済み] .の違いは何ですか?(ドット)と$(ドルマーク)の違いは何ですか?
-
[解決済み] Haskellにはなぜ "data "と "newtype "があるのですか?重複] [重複] [重複
-
[解決済み] 制約条件付き特殊化
-
[解決済み] Haskell における `mod` と `rem` の違い
-
[解決済み] Haskellのリストを参照する際の「@」記号の意味は?
-
[解決済み] レコードの単一フィールドを割り当て、残りのフィールドはコピーするための省略記法?
-
[解決済み] GHCでコンパイルした小さなHaskellプログラムを巨大なバイナリにする