对于标题gore(如果您可以提出更好的建议,请做)对不起。但我的问题是,我不太明白如何让这个阻止工作。我有一个代码在列表中返回5
的位置。喜欢这样:将两个函数的返回值分配给一个do块中的两个变量
findFive :: [[Int]] -> (Int, Int)
findFive rs = do
x <- xPos rs 0
y <- yPos rs 0
return ((x,y))
xPos :: [[Int]] -> Int -> Int
xPos (rs:[[]]) n = n
xPos (rs:rss) n | elem 5 rs = n
| otherwise = xPos rss (n+1)
yPos :: [[Int]] -> Int -> Int
yPos (rs:[[]]) n = n
yPos (rs:rss) n | elem 5 rs = n
| otherwise = yPos rss (n+1)
我
,但我不能用我做阻断这种方式。我可以让它通过做
findFive :: [[Int]] -> (Int, Int)
findFive xs = ((xPos xs 0), (yPos (transpose (xs)) 0))
但这看起来有点丑。
另外,有没有办法让这个工作没有发送0
到xPos
和yPos
?
XPOS和yPos是,除了名字相同。这是完全不必要的,并且避免了整个功能点。当你发现自己使用复制和粘贴进行编码时,几乎总是有一个更好的方法。 –
@ Code-Apprentice是的。我注意到,改为一个'pos'函数。在调用Y位置的列表中调用转置 –
'(yPos(转置(xs))'中的一个小注释''不需要围绕'xs'的括号。请记住,在Haskell中,函数应用程序是一个简单的空格,括号用于指定运算符的优先级,这与调用函数时使用其他语言的括号不同,你可能已经知道了,我只是想为未来的读者指出它 –