2012-03-12 6 views
1

これまではこの問題を解決しようとしていましたが、解決策を探していました。Haskell:リストxsと整数nをとり、xsからの要素で長さnのすべてのリストを返す関数

リストxsと整数nをとり、長さnのすべてのリストをxsの要素で返す関数が必要です。たとえば:

list _ 0 = [] 
list xs n = do 
    y <- xs 
    ps <- list xs (n-1) 
    return y : ps 

と、この:意図したとおりに

list _ 0 = [] 
list xs n = do 
    y <- xs 
    y : list xs (n-1) 

なし作業

function [0,1] 3 = [[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]] 

私はこれを試してみました。私は2つのことを知りたい: これらはなぜ機能しないのですか? 動作するように変更する方法を教えてください。

+0

を試してみては、この宿題ですか?もしそうなら、タグ付けしてください! – is7s

+0

いいえ、それは宿題ではありません。 – Undreren

+0

意図的にリスト内包を避けていますか? 'do'はもちろん問題ありませんが、IMOはこのようなタスクを理解することを難しくしています。 – leftaroundabout

答えて

8

あなたは非常に近いです!あなたの問題は基本ケース、list _ 0 = []です。

xsの要素に長さ0のリストがないということですが、実際には空のリストが1つあります。

list _ 0 = [[]] 
list xs n = do 
    y <- xs 
    ps <- list xs (n-1) 
    return $ y : ps 
+4

または、 'list_ 0 =モナドテーマに合わせて[]'を返してください! – pat

+0

これはコンパイルされませんか? stuff.hs:5:20: a1 = [a1] 予想タイプ:[[a1]] 実際のタイプ:[a1] '(:)の2番目の引数には、 '、つまり 'ps' 式の中にreturn y:ps – Undreren

+5

' return $ y:ps'は必要ありませんか? – pat

関連する問題