是否有可能在lambda函数上有守卫?
例如:
\k
| k < 0 -> "negative"
| k == 0 -> "zero"
| otherwise -> "positive"
Run Code Online (Sandbox Code Playgroud) 我正在编写一个需要sudo多个命令的bash脚本.我可以做这个:
( whoami ; whoami )
Run Code Online (Sandbox Code Playgroud)
但我不能这样做:
sudo ( whoami ; whoami )
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
对于vim,有一个名为NERDtree的文件系统资源管理器:https://github.com/scrooloose/nerdtree
当然,Emacs还有替代或优质套餐吗?
注意不是"功能依赖".是否有可用的工具允许我从源代码构建静态函数依赖图?向我指示哪些功能以图形方式依赖于哪些功能的东西.
您最有可能写下以下哪项?
r = zip xs $ map sqrt xs
Run Code Online (Sandbox Code Playgroud)
要么
r = [(x, sqrt x) | x <- xs]
Run Code Online (Sandbox Code Playgroud)
互联网上的示例代码似乎表明前者更为丰富且是首选方式.
更新:好的,这个问题可能非常简单.
q <- mapM return [1..]
Run Code Online (Sandbox Code Playgroud)
为什么这永远不会回来?
mapM是不是懒得处理无限列表?
下面的代码挂起.但是,如果我用线B替换A线,它就不会再挂起了.或者,如果我在A行之前加上"splitRandom $",它也不会挂起.
Q1是:mapM不是懒惰的吗?否则,为什么用线B替换A行"修复此"代码?
Q2是:为什么前面的A行与splitRandom"解决"了这个问题?
import Control.Monad.Random
import Control.Applicative
f :: (RandomGen g) => Rand g (Double, [Double])
f = do
b <- splitRandom $ sequence $ repeat $ getRandom
c <- mapM return b -- A
-- let c = map id b -- B
a <- getRandom
return (a, c)
splitRandom :: (RandomGen g) => Rand g a -> Rand g a
splitRandom code = evalRand code <$> getSplit
t0 …Run Code Online (Sandbox Code Playgroud) Unix模块中的示例:
val environment : unit -> string array
Run Code Online (Sandbox Code Playgroud)
为什么不呢:
val environment : string array
Run Code Online (Sandbox Code Playgroud)
?
假设我有x :: [(n, a)]n是数字,a是不可订购的项目(不是Ord类).
我想用n对这个列表进行排序.
我做不到sort x因为a不可订购.我可以用a索引替换然后使用组装新列表,!!但这似乎是一个糟糕的解决方案.
备择方案?
例如,如果我想查看来自Test.QuickCheck的输出,是否有一个命令我可以向GHCI发出这样的命令?
我写了以下两个函数.
pair :: [a] -> [(a, a)]
pair [] = []
pair [x] = []
pair (x1:x2:xs) = (x1, x2) : pair xs
unpair :: [(a, a)] -> [a]
unpair [] = []
unpair ((x1, x2):xs) = x1 : x2 : unpair xs
Run Code Online (Sandbox Code Playgroud)
对将采用成对元素并制作它们的2元组.如果列表具有奇数个元素,则丢弃最后一个元素.Unpair是对的反面.
这些工作,但想知道是否有更简洁的方式来写这些.