给出数字“ lst”和数字“ n”的列表。返回一个数字列表,其中至少有一个与“ n”相同的数字。数字系统被认为是十进制。该函数应返回以下结果:
sameDigits [1,11,45,23] 12 -> [1,11,23]
sameDigits [72,47,55] 7 -> [72, 47]
我使用“列表理解”解决了这个问题。我遍历列表中的数字,将它们转换为“元素字符串”,并为每个元素获取这些元素的“不同集合的列表”,并将它们与从给定数字获得的不同集合的列表进行比较。如果列表的长度> 0,那么我将这个项目包括在结果列表中。我使用函数“子序列”解决了问题,该函数返回列表中每个元素的所有可能迭代,函数“相交”返回两个列表的公共元素列表。
let sameDigits lst n = [ x | x <- lst, if length (tail (subsequences (show x) `intersect` subsequences (show n))) > 0
then x else [] ]
但是该函数因错误而崩溃,请帮助我修复它。
感谢Robin Zigmond!这是根据他的建议构建的功能。
let sameDigits lst n = [ x | x <- lst, length (tail (subsequences (show x) `intersect` subsequences (show n))) > 0 ]
sameDigits [1,11,45,23] 12
-> [1,11,23]
sameDigits [72,47,55] 7
-> [72,47]