【问题标题】:Haskell: Creating an isEqual function for a listHaskell:为列表创建 isEqual 函数
【发布时间】:2016-04-04 17:11:01
【问题描述】:

我想创建一个 isEqual 函数来比较列表中每个字符串的长度。 如果每个字符串的大小相等,例如[“那个”、“那里”、“9999”、“1#”]

如果所有字符串长度相等,则返回 True 否则返回 False。

我正在寻找一种需要最少代码和运行时间的方法。

【问题讨论】:

标签: haskell


【解决方案1】:

可能更容易递归地编写它

isEq [] = True
isEq [x] = True
isEq (x:y:xs) = x==y && isEq (y:xs)

所以第一个不等大小的短路。

【讨论】:

    【解决方案2】:

    你可以试试

    minimumBy length == maximumBy length
    

    (未经测试,不适用于空列表)

    【讨论】:

      【解决方案3】:

      永远只有一个班轮......

      (== 1) . length . nub
      

      您需要导入Data.List。这将比模式匹配执行得差(对于小于 100 的列表几乎没有),但它易于阅读,并且可能符合“最少代码量”的标准。

      【讨论】:

      • 我想他想先申请length,然后然后删除重复项。 (== 1) . nub . length.
      • @chepner - 他把两个版本都放在了问题中。事实上,我首先在本地添加了额外的长度,然后将其取出以匹配他的isEqual 函数。请注意,您的 sn-p 不起作用,因为您需要一个额外的地图(用于列表),并且仍然需要小块之后的唯一长度才能验证小块列表的长度为 1。
      • 哦,对了。但他的第一个问题肯定是要比较字符串的长度,而不是字符串本身。所以像(== 1) . nub . (map length)?
      • @chepner - 你仍然需要额外的长度...... (== 1) 正在检查后结节列表的长度是否为 1。试试(== 1) . length . nub . map length
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多