首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让多行haskell函数在ghci中工作

让多行haskell函数在ghci中工作
EN

Stack Overflow用户
提问于 2016-08-11 09:39:04
回答 3查看 763关注 0票数 2

我创建了这个haskell函数来删除列表中的奇数,并尝试在ghci中使用。尽管我启用了多行模式并使用了4个空格进行缩进,但我仍然收到下面的错误消息。

代码语言:javascript
复制
Prelude> :set +m
Prelude> let removeOdds nums =
Prelude|     if null nums
Prelude|     then []
Prelude|     else
Prelude|         if (mod (head nums)/2) == 0
Prelude|         then (head nums) : (removeOdds(tail nums))
Prelude|         else removeOdds(tail nums)
Prelude| 

:11:5:解析错误(可能缩进不正确或括号不匹配)

我阅读了this页面,了解了一些常见的mistable新手将会犯的错误,并按如下所示更改了代码

代码语言:javascript
复制
Prelude> let removeOdds nums =
Prelude|     do if null nums
Prelude|         then []    
Prelude|         else 
Prelude|           do if mod((head nums)/2) == 0
Prelude|               then head nums: removeOdds(tail nums)   
Prelude|               else removeOdds(tail nums)
Prelude| 

<interactive>:47:5:
    parse error (possibly incorrect indentation or mismatched brackets)

现在我以一个新的错误结束。在haskell中,缩进似乎是一件很困难的事情。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-11 09:53:50

您的if语句需要至少多缩进一个空格:

代码语言:javascript
复制
Prelude> let removeOdds nums =
Prelude|      if null nums

Complete example:

Prelude> let removeOdds nums =
Prelude|      if null nums
Prelude|      then []
Prelude|      else
Prelude|          if (mod (head nums) 2) == 0
Prelude|          then (head nums) : (removeOdds(tail nums))
Prelude|          else removeOdds(tail nums)
Prelude|
Prelude>
票数 4
EN

Stack Overflow用户

发布于 2016-08-11 13:15:13

在定义多行函数时,我在GHCi中使用大括号。它们允许您像通常编写的那样粘贴一大块Haskell代码。

代码语言:javascript
复制
λ :{
| let
| -- type or paste here, e.g.,
| removeOdds :: Integral a => [a] -> [a]
| removeOdds nums =
|   if null nums
|   then []
|   else -- ...
| :}
λ removeOdds [1,2,3,4]
[2,4]
票数 2
EN

Stack Overflow用户

发布于 2016-08-11 10:09:40

值得注意的是,如果您不在REPL中,因此不需要let,那么您就不需要如此多的缩进:

代码语言:javascript
复制
removeOdds nums =
  if null nums
  then []
  else
    if (mod (head nums) 2) == 0
    then (head nums) : (removeOdds(tail nums))
    else removeOdds(tail nums)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38886002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档