Haskell:如何删除相同的函数并连接两个列表

时间:2017-04-30 07:06:39

标签: haskell

我是haskell的初学者。我想在同一个列表中删除一些相同的函数,并将两个列表连接在一起。 例如:

db1 = ["David","worksfor.isa", "IBM" ] 
db2 = ["David","isa'.worksfor'", "IBM"] 
db3 = ["Tom","worksfor.isa", "IBM" ]

程序可以知道“isa'.worksfor”和“worksfor.isa”是相同的字符串。然后使用“Concat”获取新的dbdb1 =["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')]))))  ??????

我想“拆分字符串,如果有'字符,反转它,然后删除'字符并检查等价”

1 个答案:

答案 0 :(得分:6)

这应该是一个评论,但它太长了:

我认为你很难用英语表达自己。我可以与此相关;我觉得很难。但是,除了英语之外,还有另外两种方式可以在这里进行交流:

  1. 使用精确的技术术语。
  2. 使用多个不同的例子。一个例子是不够的,而且几个太相似的例子几乎没有提供信息。
  3. 对于选项1,您使用的是错误的术语。我很难看到如何将包含3个项目的列表视为数据库(如名称db1db2所示)。也许你想使用三元组列表?

    [ ("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'个字符并检查等效性"但这完全是猜测。

    总结:

    1. 请详细说明您尝试解决的一般问题。试着找出准确的术语;这很难,但这样你就可以学习。
    2. 请添加输入和输出的不同示例
    3. 请尝试解释您尝试过的内容以及您在哪里停留
    4. 作为最后一个提示,也许你想用比Haskell更宽容的语言来解决这个问题(比如JavaScript,Python,Ruby等)。