Haskell。返回一个数字列表,其中至少存在一个与“ n”

问题描述 投票:0回答:1

给出数字“ 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 [] ]

但是该函数因错误而崩溃,请帮助我修复它。

haskell haskell-stack template-haskell haskell-platform
1个回答
0
投票

感谢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]
© www.soinside.com 2019 - 2024. All rights reserved.