在从Haskell中的do块返回之前,是否可以检查某些条件?
我在做这样的事情在从Haskell中的do块返回之前,是否可以检查某些条件?,haskell,syntax,monads,do-notation,Haskell,Syntax,Monads,Do Notation,我在做这样的事情 do xs <- xss x <- x if x > 3 return x do xs您需要导入Control.Monad并使用guard import Control.Monad (guard) do xs <- xss x <- xs guard (x > 3) return x import Control.Monad(守卫) 做 xs将if替换为guard@hustmphrr如果你想回答一个问题,
do
xs <- xss
x <- x
if x > 3
return x
do
xs您需要导入Control.Monad
并使用guard
import Control.Monad (guard)
do
xs <- xss
x <- xs
guard (x > 3)
return x
import Control.Monad(守卫)
做
xs将if
替换为guard
@hustmphrr如果你想回答一个问题,回答它,不要发表评论,但一定要知道答案。我不确定guard
是否真的解决了这里的问题,无论如何,任何关于guard
的建议都应该解释如何使用if
模仿/实现它。另外,guard
不需要任何包,只需要一个模块导入(Control.Monad
)。@heapOverflow您能否简要解释一下Scala代码的具体功能,或者给出一个简单的具体示例?如果x不大于3,结果应该是什么?仅供参考,Haskell中并没有“返回前”的概念return
的意思与您认为来自其他语言的意思完全不同。我同意将函数命名为return
可能是个坏主意(不是因为名称本身,而是因为命令式语言将其用于完全不同的语义概念),但是return
实际上并不终止控制流(本身),也不意味着它本身返回一个值。甚至更好的是:do{xs 3)xs}
。总是不需要写x
import Control.Monad (guard)
do
xs <- xss
x <- xs
guard (x > 3)
return x
do
xs <- xss
x <- xs
_ <- filter (>3) [x]
return x
do
xs <- xss
filter (> 3) xs