我是haskell的初学者。我想在同一个列表中删除一些相同的函数,并将两个列表连接在一起。 例如:
db1 = ["David","worksfor.isa", "IBM" ]
db2 = ["David","isa'.worksfor'", "IBM"]
db3 = ["Tom","worksfor.isa", "IBM" ]
程序可以知道“isa'.worksfor”和“worksfor.isa”是相同的字符串。然后使用“Concat”获取新的db
:db1 =["David","worksfor.isa", "IBM" ]
和其他:db3 = ["Tom","worksfor.isa", "IBM" ]
(map (\(a,b,c) -> concat (map(\(a',b',c') -> if ( a b == b' a') then [] else [(a,b ++ "." ++ b',c')])))) ??????
我想“拆分字符串,如果有'字符,反转它,然后删除'字符并检查等价”
答案 0 :(得分:6)
这应该是一个评论,但它太长了:
我认为你很难用英语表达自己。我可以与此相关;我觉得很难。但是,除了英语之外,还有另外两种方式可以在这里进行交流:
对于选项1,您使用的是错误的术语。我很难看到如何将包含3个项目的列表视为数据库(如名称db1
,db2
所示)。也许你想使用三元组列表?
[ ("David","isa'.worksfor'", "IBM") ]
您并不具体说明您想要连接的内容,但术语concatenation
总是是指必须为"添加"的操作,即{ {1}}。在您的问题中似乎并非如此。
你想要两个数据库(三元组列表)的 union 达到等价吗?
您希望程序理解
"赛' .worksfor'"和" worksfor.isa"是相同的字符串
但他们不是。它们可能是等效的字符串。您通常可以使用地图操作来执行此操作,就像您尝试过的那样,但您应该注意字符length(x ++ y) == length(x) ++ length(y)
不是对字符串的操作。因此,'
无法满足您的需求 - 它会在变量a b == b' a'
上调用函数a
,并将其与调用函数 {{1}进行比较在变量b
上方。我只能假设您需要类似"分割字符串,如果有b'
个字符,则反转它,然后删除a'
个字符并检查等效性"但这完全是猜测。
总结:
作为最后一个提示,也许你想用比Haskell更宽容的语言来解决这个问题(比如JavaScript,Python,Ruby等)。