小编gdr*_*les的帖子

Haskell readLn没有解析错误

此功能允许用户输入字符串列表.该函数采用长度并允许用户输入长度为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:没有解析)我无法弄清楚为什么,任何想法?

io parsing haskell

9
推荐指数
2
解决办法
3684
查看次数

Haskell Int和Maybe Int

基本上我有一个使用Maybe Int来显示数独问题的函数.Sudoku的解决方案只包含Ints,显示Grid的代码几乎相同,但Maybe Int用于Problems和Int用于解决方案.

是否可以将Int值用于需要Maybe Int的函数,如果是这样的话?

编辑:只是工作,有没有办法将Int的列表转换为Int的?

int haskell maybe

4
推荐指数
1
解决办法
1731
查看次数

Haskell IO递归

我有代码:

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

io recursion haskell

3
推荐指数
1
解决办法
731
查看次数

Haskell ReplicateM IO

我正在尝试创建一个允许用户输入字符串列表的函数.该函数采用长度并允许用户输入长度为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给出了解析错误.

io haskell parse-error replicate

3
推荐指数
1
解决办法
1857
查看次数

在Haskell中映射和过滤

我有两个元组列表如下:[(String,Integer)][(Float,Integer)].每个列表都有几个元组.

对于在第二个列表Integer中具有a的每个Float,我需要检查它是否IntegerInteger第一个列表中的匹配,如果匹配,则返回String- 尽管此函数需要返回Strings 列表,即[String]包含所有结果.

我已经定义了一个函数,它返回Integer第二个列表中的s列表(用于比较第一个列表中的整数).

这应该可以使用"高阶函数"来解决.我花了很多时间摆弄相当量mapfilter但还没有找到一个解决方案!

dictionary haskell function filter

2
推荐指数
1
解决办法
7073
查看次数

Haskell递归

我一直在努力为给定表达式中的变量添加一个计数器,并具有以下测试用例:

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)

recursion haskell list

2
推荐指数
1
解决办法
450
查看次数

Haskell模式匹配

我有这个代码:

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.

haskell

1
推荐指数
2
解决办法
386
查看次数

标签 统计

haskell ×7

io ×3

recursion ×2

dictionary ×1

filter ×1

function ×1

int ×1

list ×1

maybe ×1

parse-error ×1

parsing ×1

replicate ×1