, K-1하나 및 10으로 나열, ..., 0 하나 및 K제로리스트와 하스켈 그들은 될 수 있도록 느슨하게 회수 되었습니까?게으른 목록은 하나 <strong>K</strong><em>하나</em> 및 <strong>0</strong><em>제로</em>와리스트의리스트를 구현하는 것이 어떻게
예를 들어 만약 K = 3에 대한 조언
generate_list 3 = [[1,1,1],[0,1,1],[1,0,1],[1,1,0],[0,0,1],[0,1,0],[1,0,0],[0,0,0]]
감사 bheklilr. 여기 내 솔루션입니다 :
generate k = take (2^k) $ foldl (\x y -> zipWith (:) y x) (map (\x->[x]) (head rows)) (tail rows)
where
rows = map cycle $ map pattern [0..k-1]
pattern i = replicate (2^i) 1 ++ replicate (2^i) 0
그러나 문제가있다 :
generate_list 3 = [[1,1,1], [0,1,1], [1,0,1], [1,1,0], [0,0,1], [0,1,0], [1,0,0], [0,0,0]]
generate 3 = [[1,1,1], [1,1,0], [1,0,1], [1,0,0], [0,1,1], [0,1,0], [0,0,1], [0,0,0]]
generate 3 !! 3 = [1,0,0] - it contains 1 one
generate_list 3 !! 3 = [1,1,0] - it contain 2 one
그래서
generate_list
출력 순서에서 내 작업 순서가 중요하고
[1,1,0]
이
[1,0,0]
앞에 와야합니다.
지금까지 시도한 내용은 무엇입니까? 시도한 코드를 보여줄 수 있습니까, 아니면 'Data.List'와 같이 사용하려고 시도한 라이브러리를 말할 수 있습니까? – bheklilr
[진리 테이블] (http://en.wikipedia.org/wiki/Truth_table)을 만드는 것과 이것이 갖는 관계에 대해 생각해 보셨습니까? 손으로 채우는 아주 간단한 알고리즘이 있습니다. 어떻게 코드로 변환 할 수 있습니까? – bheklilr
나는 반전 된 목록을 생성하고 싶습니다. 진리를 만들고 그것을 뒤집어 놓으면 나는 게으름을 잃을 것입니다. – kunteynir