The Little Schemerには、リストがフラットかどうかをチェックする関数があります。
(define lat?
(lambda (l)
(cond
((null? l) #t)
((atom? (car l)) (lat? (cdr l)))
(else #f))))
Haskell で同じ再帰関数を書き込もうとしていますが、成功しません。
is_lat :: [a] -> Bool
is_lat [] = True
is_lat ???
パラメータがフォームにないことを確認するにはどうすればよい[[a]]
ですか? つまり、[1,2,3]
は有効な入力ですが、[[1,3], [2,4]]
とはそうで[[[1,2,3]]]
はありません。
リストを受け入れる再帰関数でこれをさらに使用して、フラットリストのみを確実に処理したいと考えています。
編集:is_lat :: [a] -> Bool
型シグネチャのために人々が混乱しているようです。実行時に型をチェックするべきではないことに同意します。しかし、コンパイル時に型をチェックすることは可能ですか? 関数をフラットリストに対してのみ機能させるにはどうすればよいですか? それとも考え方を根本から変えるべきですか?