【问题标题】:Haskell Tail SplitHaskell尾巴分裂
【发布时间】:2013-10-16 13:44:36
【问题描述】:

这就是我想要做的:

如果我给 $hello world我会得到world

我正在做的是这样的:

tail (unwords (words "$hello world")) 但我得到的是"hello world" 而不是world

我必须做些什么才能让它正确?

【问题讨论】:

    标签: string haskell split tail


    【解决方案1】:

    您必须在tail 之后应用unwords,而不是相反。

    预期的步骤顺序(可能)如下:

    1. 将字符串分解为单词列表
    2. 从列表中删除第一个单词
    3. 将剩余的单词加入一个字符串

    按照您的操作方式,您拆分并立即重新连接单词,然后您只需删除结果字符串的第一个字符(因为字符串只是字符列表)。

    【讨论】:

    • 虽然我喜欢你指出 OP 做错了什么,但从技术上讲,这缺少解决问题的方法。无论如何 +1。
    • @Waldheinz:不正确。解决方案是答案的第一行。
    【解决方案2】:

    你想做的是

    unwords $ tail $ words "$hello world"
    

    在 GHCi 中处理它,我们得到

    > words "$hello world"
    ["$hello", "world"]
    > tail $ words "$hello world"
    ["world"]
    > unwords $ tail $ words "$hello world"
    "world"
    

    【讨论】:

      【解决方案3】:

      正如 fjh 正确说明的那样,字符串数组 ["$hello", "world"] 重新加入字符串 "$hello world"tail,然后切掉第一个字符 $。我建议使用函数last 而不是tail $ unwords,它将从单词数组world 中取出最后一个元素。

      Prelude> last $ words $ "$hello world"
      "world"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-05
        相关资源
        最近更新 更多