此功能允许用户输入字符串列表.该函数采用长度并允许用户输入长度为1的行.然后检查每一行以确保它与原始行的长度相同.代码:
readme :: IO [Line]
readme = do
line <- readLn
let count = length line
lines <- replicateM (count-1) $ do
line <- readLn
if length line /= count
then fail "too long or too short"
else return line
return $ line : lines
Run Code Online (Sandbox Code Playgroud)
Line的类型为String.
当我尝试运行该函数并输入..说["12","13"]我得到以下内容:*例外:用户错误(Prelude.readIO:没有解析)我无法弄清楚为什么,任何想法?
基本上我有一个使用Maybe Int来显示数独问题的函数.Sudoku的解决方案只包含Ints,显示Grid的代码几乎相同,但Maybe Int用于Problems和Int用于解决方案.
是否可以将Int值用于需要Maybe Int的函数,如果是这样的话?
编辑:只是工作,有没有办法将Int的列表转换为Int的?
我有代码:
read :: IO [Line]
read = do
line <- getLine
let count = length line
line2 <- getLine
if (length line2 /= count)
then error "too long or too short"
else read
Run Code Online (Sandbox Code Playgroud)
我想要做的是,基于第一行的长度,用户必须输入长度为1的行,如果这些行中的任何行与原始行的长度不同,则将显示错误消息.
现在我的代码只是一个无限循环,因为我无法弄清楚如何输入长度为1的行.对此的一些指导将不胜感激.
编辑:行的类型为String
我正在尝试创建一个允许用户输入字符串列表的函数.该函数采用长度并允许用户输入长度为1的行.然后检查每一行以确保它与原始行的长度相同.但是,我遇到了一些问题,我找不到解决办法.
问题是我可以输入多于count-1行,并且长度没有像我预期的那样计算..例如,如果我输入["12","13"]然后["121","13" ]给出了错误,虽然长度相同!
read :: IO [Line]
read = do
line <- getLine
let count = length line
lines <- replicateM (count-1) $ do
line <- getLine
if length line /= count
then fail "too long or too short"
else return line
return $ line : lines
Run Code Online (Sandbox Code Playgroud)
Line的类型为String.
readLn给出了解析错误.
我有两个元组列表如下:[(String,Integer)]和[(Float,Integer)].每个列表都有几个元组.
对于在第二个列表Integer中具有a的每个Float,我需要检查它是否Integer与Integer第一个列表中的匹配,如果匹配,则返回String- 尽管此函数需要返回Strings 列表,即[String]包含所有结果.
我已经定义了一个函数,它返回Integer第二个列表中的s列表(用于比较第一个列表中的整数).
这应该可以使用"高阶函数"来解决.我花了很多时间摆弄相当量map和filter但还没有找到一个解决方案!
我一直在努力为给定表达式中的变量添加一个计数器,并具有以下测试用例:
prop_add1 = add (And (Var "a") (And (Var "b") (Var "a"))) ==
And (Var "a1") (And (Var "b2") (Var "a1"))
Run Code Online (Sandbox Code Playgroud)
我一直在使用Pattern Matching和Recursion来尝试找到解决方案.虽然我有点陷入困境,但我尝试将原始变量添加到列表中,然后使用列表确定要输出的变量名称,但我无法弄清楚如何正确实现它并且我的输出只添加1到所有变量的结尾.
我想知道有更好/更容易的解决方案吗?
到目前为止我的尝试:
add :: Expr -> Expr
add T = T
add (Var x) = Var (x ++ show (check2(check x)))
add (And e1 e2) = And (add e1) (add e2)
add (Not e1) = Not (add e1)
check :: Variable -> [Variable]
check p = [p]
check2 :: [Variable] -> Int
check2 p = length (union …Run Code Online (Sandbox Code Playgroud) 我有这个代码:
type Variable = String
data Expr = T | Var Variable | And Expr Expr | Not Expr
Run Code Online (Sandbox Code Playgroud)
测试用例如下:
prop_v1 = v (Not (And (Var "y") T)) === ["y"]
Run Code Online (Sandbox Code Playgroud)
是什么意思data Expr- 它只是定义了可以输入的类型及其参数吗?即,Var需要一个Variable,And需要两个Expr.