У меня есть функция, которая возвращает список, как это:Замена пустых списков со значением
[ [1, 2, 3], [], [5], [5,6], []]
Но я хочу, чтобы заменить пустые списки с 0, так что он выглядит как этот
[ [1, 2, 3], [0], [5], [5,6], [0]]
До сих пор я пробовал filter
и map
с небольшим успехом. Может ли кто-нибудь указать мне в правильном направлении?
Вот код в вопросе:
knightPlace:: [Int] -> [[Int]]
knightPlace n = makeboard n
where
makeboard n = [x | i<-[0..(length n -1)], x <- [checkPos i]]
-- checkPos add zero
checkPos i = [j+1 | j<-[0..(length n -1)], queenFilter n i j]
-- filters all rows, cols and diags, also knights
queenFilter n i j = and [n!!(i) == 0 && n!!(k) /=(j+1) && (n!!(k)==0 || (abs(n!!(k)-(j+1))/=abs(i-k))) && (n!!(k)==0 ||not(((abs(i-k)==2)&& (abs(n!!(k)-(j+1))==1)) ||((abs(i-k)==1)&& (abs(n!!(k)-(j+1))==2)))) | k<-[0..(length n - 1)] ]
Вызывается как
knightPlace [0, 0, 6, 0, 0, 4, 0, 0]
Вы пытались скомпилировать эту последнюю функцию в комментариях? Вы должны получить ошибку области. ;) – kqr
О, хорошо, я пишу его в поезде и не проверял. – mariop