まず、タイプから始めて、実際に開始するのが良い方法です。
のタイプをチェックしてみましょう:ここ
cons8 :: [a] -> [a]
を、a
はどのタイプにすることができます。上記の型は、呼び出し元が任意のリストでcons8
を使用できることを約束しています:整数のリスト、文字のリスト、ブール値のリストなど.8を前に置いて、同じタイプの値をリストしたいので、上記のタイプはあまり一般的ではありません。あまり一般的でないものを使用しましょう。
cons8 :: [Int] -> [Int]
ここで、リスト引数を取る方法。これは重要です:あなたは他の引数としてリスト引数を取る。
cons8 x = ???? -- TODO
よくある間違いは、リストであるのでcons8 [n] = ...
と書いてください。それをしないでください! [n]
はリストですが、1つの要素(n
)のみを持つリストは非常に特殊なものです。 1要素のリストのみを扱いたいとは思わないので、cons8
はのいずれかのリストと一緒に働きたい。したがって、中括弧はありません。x
をリスト全体の引数にしてください。もちろん
cons8 x = 8 : x
は、我々は他の名前、例えばにx
の名前を変更することができます
その後、私たちは短所演算子を適用することができます
cons8 list = 8 : list
でも動作します。あなたはHaskellで出世すると、あなたはおそらく
セクションについて学び、そして次のコードを実際に
cons8 = (8 :)
を好むだろう、(8 :)
あなたは通常cons8
関数を定義回避し、直接使用することをとても短く、その定義。
出典
2016-07-08 16:57:37
chi
あなたの型署名は、 'cons8'はどんな型のリストでも動作することを示唆していますが、' 8'をリストに入れたい場合は、数字のリストでなければなりません。 – sepp2k
これはおそらく重複していますが、とにかく簡単な答えです:パターンマッチする2つの定義を下に置く必要があります。空リストと非2行の定義を1つ入れます: 'cons8 [] = )、cons8(x:xs)=(空でない場合、xパターンは頭に一致し、タイプa、リストの残りの部分にxs、タイプ[a]) 'である。 「cons8」は空のケースは必要ありませんが、私はあなたがなぜ頭を操作するのではなく、リスト自体で何かをやっているのを見ることができれば幸いです。 –
また、簡単な1つの答えは、中置機能を利用するために接頭辞関数を接頭辞に変換することです(私はそれが正しい用語だと思います)。 'cons8 =(:) 8' –