Дан список чисел «lst
» и номер «n
». Возвращает список чисел, в котором присутствует хотя бы одна из тех же цифр, что и в «n
». Система счисления считается десятичной.
Функция должна возвращать следующие результаты:
sameDigits [1,11,45,23] 12 -> [1,11,23]
sameDigits [72,47,55] 7 -> [72, 47]
Я решаю задачу, используя «понимание списка». Я перебираю числа из списка, конвертирую их в «строку элементов» и получаю для каждого элемента «список различных наборов» этих элементов и сравниваю их со списком различных наборов, полученных из данного числа. Если длина списка > 0
, я включаю этот элемент в список результатов. Решаю задачу с помощью функции «subsequences
», которая возвращает все возможные итерации каждого элемента списка; и функция «пересекается», которая возвращает список общих элементов для двух списков:
let sameDigits lst n = [ x | x <- lst, if length (tail
(subsequences (show x)
`intersect` subsequences (show n))) > 0
then x else [] ]
Но функция вылетает с ошибкой, помогите мне исправить.
<interactive>:63:131:
Couldn't match expected type ‘Bool’
with actual type ‘[t0]’
In the expression: []
In the expression:
if length (tail (subsequences (show x)
`intersect` subsequences (show n))) > 0
then x else []
In a stmt of a list comprehension:
if length (tail (subsequences (show x)
`intersect` subsequences (show n))) > 0
then x else []