Hな中間テスト 本番
Haskellは何言語か。またその特徴を書け。
多くのプログラミング言語は文法や機能の挙動を確かめるために、REPLと呼ばれる対話環境が 用意されることがある。Haskellでは何というコマンドを使うか。また、REPLは何の略か。
下記のコードで得られる結果を書け。また下記のようなリストを何と言い、Haskellの何という特徴により正常に動作するか書け。
take 5 [13,26..]
リスト [1,2,3,4,5] を返すコードを2種類の方法で定義せよ。ただし、(++)関数、自作の関数、リスト内包記法を使ってはならない。
リストとペアの違いを書き、2番目の要素を取り出すようなコードを、それぞれについて書け。
関数 head の型定義は次のようになっている、head :: [a] -> a 型定義中のa, b などの変数を何と言うか書け。 またこのような変数を利用している関数のことは何と呼ばれるか。 さらに、この変数と型の文字列の違いは何で判断するか書け。
以下のコードの型を書け。ただし、出来うる限り汎用的な型にせよ。
sum' [] = 0
sum' (x:xs) = x + sum' xs
型クラス | 制約 | 関数定義 |
---|---|---|
Eq | 等価性 | ==, /= |
順序 | ||
文字列表現 | ||
Read | リテラル表記 | read |
Enum | ||
Bounded |
任意の階乗を求める関数factorialを再帰とパターンマッチを利用して定義せよ。型定義も書くこととする。
max'を定義せよ。型定義も書くこととする。
任意のリストから最大値を見つけるmaximum'を定義せよ。
Intと任意の値を取り、受け取ったIntの数だけ任意の値を複製するreplicate'関数を定義せよ。
zipWith'を定義せよ。
zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c]
1~100までのリストから奇数のみを取り出し、その後全ての要素を二乗する処理を、 リスト内包記法、高階関数の2パターンのうち、どちらかの方法で定義せよ。
map'を再帰・高階関数の2パターンのうち、どちらかの方法で定義せよ。
filter'を定義せよ。
関数を引数に取り、最初の2つの引数が入れ替わった関数を返すflip'をwhere、カリー化、ラムダ式の3パターンのうち 2パターンを定義せよ。
foldlを使いリストの合計を算出するsum'を定義せよ。
reverse'を畳込みを使って定義せよ。
以下の式を関数合成と関数適用演算子を利用して、書き換えろ。
sum (replicate 5 (max 6.7 8.9))