我是Haskell的新手!! 我写了这段代码:
import Data.List
inputIndex :: [String] -> [String] -> Bool
inputIndex listx input = and [x `elem` listx |x <- input]
inputIndex = if inputIndex == true
then putStrLn ("ok")
在没有if
语句的情况下工作正常但是当我放入if
语句时,会显示以下错误:
表达式中的语法错误(意外的`}',可能是由于布局错误)
我在这里做错了什么?
由于
答案 0 :(得分:8)
这里有一些问题:
True
必须大写。inputIndex
必须总是带两个参数(现在它不会,在最后一种情况下)。我想你想要这样的东西......
inputIndex :: [String] -> [String] -> IO ()
inputIndex listx input = if inputIndex' listx input
then putStrLn ("ok")
else putStrLn ("not ok")
where
inputIndex' :: [String] -> [String] -> Bool
inputIndex' listx input = and [x `elem` listx |x <- input]
(这里我通过附加一个素数/撇号来定义一个名称几乎相同的新函数。通过在where
子句中定义它,它只对外部inputIndex
函数可见。如果你愿意的话,你可以称之为辅助函数。我也可以选择一个完全不同的名字,但我没有创造力。)
您还可以将其浓缩为以下内容(这也更为一般):
allPresent :: (Eq t) => [t] -> [t] -> IO ()
allPresent xs ys = putStrLn (if and [y `elem` xs | y <- ys] then "ok" else "not ok")
答案 1 :(得分:0)
String -> IO()
,而你的inputIndex
看起来应该是纯粹的 - 只需返回值并将其打印到其他地方。