2013-10-16 23 views
2

这就是我想要做的事:哈斯克尔尾部分割

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

我在做什么是这样的:

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

我该怎么做才能让它正确无误?

回答

8

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

步骤的目的顺序是(可能)如下:

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

你这样做的方式,你分裂并立即重新加入单词,然后你只是放弃结果字符串的第一个字符(因为一个字符串只是一个字符列表)。

+0

虽然我喜欢你如何指出OP做错了什么,但从技术上讲这是缺少问题的解决方案。无论如何。 – Waldheinz

+0

@Waldheinz:错误。解决方案是答案的第一行。 – Sarah

2

什么你想要做的是

unwords $ tail $ words "$hello world" 

通过它在GHCI合作,我们得到

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

正如FJH正确地指出,串["$hello", "world"]阵列被重新加入到一个字符串"$hello world"tail然后剁掉第一个字符$。我建议使用函数last而不是tail $ unwords,它将从字数组world中获取最后一个元素。

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