假设我有类似这样的日期类型:
type GroupNb = Int
type Code = Int
type Name = String
type Random = Int
data Group = Group GroupNb Code Name Random deriving Show
我在其中“添加”一些数据(组)。
现在,我希望获得GroupNb
1
作为Code
,"test"
作为Name
的所有groupNumbers :: [Group] -> [a]
groupNumbers (Group _ a b _) = nub[List.find (a == 1 && b == "test") [GroupNb]]
列表。
def brujinGraph(k, strList):
vertex = [[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]]
brujinGraph = {strList[i]: strList[j][:-1] for i in range(len(vertex)) for j in range(k) and vertex[i][j] == 1}
return brujinGraph
strList = ['AAGA', 'AAGA', 'AGAT', 'ATTC', 'CTAA', 'CTCT', 'GATT', 'TAAG', 'TCTA', 'TCTC', 'TTCT']
brujinGraph(4, strList)
此解决方案不起作用......我怎么能这样做?
答案 0 :(得分:3)
如果我已正确理解您的问题,您会根据谓词(Group
)列出要code == 1 && name == "test"
的列表。这正是filter
函数的用途。这就是你的代码的样子:
someTest :: Group -> Bool
someTest (Group _ code name _) = code == 1 && name == "test"
allGroupPassingTest :: [Group] -> [Group]
allGroupPassingTest g = filter someTest g
辅助方法someTest
是filter
正在使用的谓词。
你的原始代码已经破了,because in haskell functions must start with a lower case。你的平等测试也被打破了,因为=
用于分配,而不是测试平等(你正在寻找==
)。我不知道方括号在这里做了什么nub[List.find (a = 1 && b = "test") [GroupNb]]
。方括号(据我所知)的唯一用途是表示列表或列表类型。 [GroupNb]
看起来您正在尝试将列表转换为此类型,但转换的方式是使用statement :: TypeCast
。 List.find (a = 1 && b = "test")
几乎是正确的,但(a = 1 && b = "test")
应该写成像(\(Group _ code name _) -> code == 1 && name == "test")
这样的lambda。
GroupNumbers :: Group -> [a]
GroupNumbers (Group _ a b _) = nub[List.find (a = 1 && b = "test") [GroupNb]]