我正在看的代码包含这个顶级函数:
starman :: String -> Int -> IO ()
starman word n = turn word ['-' | x <- word] n
Run Code Online (Sandbox Code Playgroud)
我可以看到这是一个带有2个参数的函数,然后调用如下所示的turn函数:
turn :: String -> String -> Int -> IO ()
turn word display n =
do if n==0
then putStrLn "You lose"
else if word==display
then putStrLn "You win!"
else mkguess word display n
Run Code Online (Sandbox Code Playgroud)
我不明白的是这意味着什么:
word ['-' | x <- word]
Run Code Online (Sandbox Code Playgroud)
全线是:
starman word n = turn word ['-' | x <- word] n
Run Code Online (Sandbox Code Playgroud)
turn 用三个参数调用:
word
['-' | x <- word]
n
Run Code Online (Sandbox Code Playgroud)
中间的那个是你遇到麻烦的.它可以理解为:"单词中每个字符的连字符."
所以['-' | x <- "hello"]是"-----".
这种结构称为列表理解.
编辑
列表理解与此相同,这在意图中可能更清晰?
replicate (length word) '-'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |