Генератор в Haskell списке не работает - PullRequest
1 голос
/ 03 февраля 2020

Я пытаюсь создать список, который будет содержать список решений для проблемы, которую я пытаюсь решить. Я делаю это, используя понимание списка, генерируя все возможные комбинации, а затем использую предикат для фильтрации, чтобы были включены только решения. Вот мой код.

solveRow :: Row -> [Row]
solveRow (Row target rowCells) =
    [(cellsToRow target cls) | (cls <- (cellPermutations rowCells)), (result cls)==target]

cellPermutations возвращает [[Cell]] и, следовательно, cls должно иметь тип [Cell]. Когда я пытаюсь скомпилировать, я получаю сообщение об ошибке.

enter image description here

Я думал, <- пропустил каждый элемент с правой стороны (в данном случае [Cell] ) к левой переменной. Почему я получаю ошибку разбора для <-?

1 Ответ

6 голосов
/ 03 февраля 2020

Не ставьте скобки вокруг cls <- (cellPermutations rowCells) - это синтаксическая ошибка. Вам также не нужны скобки вокруг cellsToRow target cls, хотя это не является ошибкой. (И, строго говоря, вам не нужны скобки вокруг result cls, но я лично считаю, что эти скобки делают его более читабельным.) Итак, ваш пример должен быть:

solveRow :: Row -> [Row]
solveRow (Row target rowCells) =
    [cellsToRow target cls | cls <- (cellPermutations rowCells), (result cls)==target]
...