考虑下面打算输出随机数的代码:
import System.Random.Mersenne
main =
do g <- (newMTGen Nothing)
xs <- (randoms g) :: IO [Double]
mapM_ print xs
Run Code Online (Sandbox Code Playgroud)
运行时,我收到分段错误错误.这并不奇怪,因为函数'randoms'产生了无限的列表.假设我只打印出xs的前十个值.我怎么能这样做?xs的类型为IO [Double],我想我想要一个类型为[IO Double]的变量.在两者之间进行转换的运算符是什么.
我的系统(arch linux)上的Yesod开发服务器"yesod devel"在空闲时使用超过30%-50%的cpu(观察已更改的文件).我猜它是关于从磁盘更改文件的轮询信息?我在一年前读了一篇关于添加hinotify的帖子(yesod 1.0.1用这个改变yesod fork分叉)我看到更新的yesod版本(1.1.9.3)添加了fsnotify(这是同样的事情,但跨平台).我在某处读到它与上述回退(从磁盘读取更改)有效,所以有人知道是否可能出现这种情况?
首先我认为它是垃圾收集器运行,但我运行yesod devel与GC关闭但没有成功.
我已经定义了一个嵌套数据类型Bush:
data Bush a = BEmpty | BCons a (Bush(Bush a))
Run Code Online (Sandbox Code Playgroud)
现在我试图在Bushes上定义一个相同的函数:
eqB :: Eq a => Bush a -> Bush a -> Bool
eqB BEmpty BEmpty = True
eqB BEmpty _ = False
eqB _ BEmpty = False
eqB (BCons x bbush1) (BCons y bbush2) = x == y -- && ....
Run Code Online (Sandbox Code Playgroud)
问题是递归调用Bush(Bush)
我可以定义一个函数eqB' Bush(Bush),但是我必须处理eq Bush(Bush(Bush)),依此类推.
有没有办法解决这个问题?
我有一个简单的问题.Haskell向我抛出57 - 未定义变量"f"错误,我不知道为什么.如果你能看一下,我会很感激的.码:
eval :: Expr -> Environment -> Float
eval expr env = eval' expr
where
eval' :: Expr-> Float
eval' (Num num) = num
eval' (App app exprs) = foldl1 (f) (map eval' exprs) -- **Line 57**
eval' (Id id) = 5
where
f = getFunctionForApp app -- **f is here**
getFunctionForApp :: String -> (Float->Float->Float)
getFunctionForApp "+" = (+)
getFunctionForApp "-" = (-)
getFunctionForApp "*" = (*)
getFunctionForApp "/" = (/)
getIdVal :: String -> Environment -> …Run Code Online (Sandbox Code Playgroud) 假设我有一个功能:
isOne :: Int -> Int -> Int
isOne x y =
Run Code Online (Sandbox Code Playgroud)
然后,如果x == 1和y != 1然后返回1(参数之一等于1),如果x == 1和y == 1它返回2(因为两者都是1),如果x != 1和y != 1它返回0等
我无法弄清楚如何使用if语句(或使用案例)进行多次检查.
我需要一些Haskell问题的帮助.
我想创建一个带有三个参数的函数 - 第一个参数是一个表示算术运算的字符,例如'+', '-', '*', '/',带有接下来的两个参数的数字列表,这个函数应该返回一个数字列表,这样给定参数
'-' [3,4,7] [-4,6,6]
Run Code Online (Sandbox Code Playgroud)
它会回来
[7,-2,1]
Run Code Online (Sandbox Code Playgroud)
但我不知道如何开始.
另外,如何计算结果列表的最小元素?
问题:翻译成"Pig Latin"的简单规则是采用以元音开头并添加"yay"的单词,同时接受任何与一个或多个辅音开始的单词并在附加之前将其转移到后面" AY".例如,"able"变为"ableyay","stripe"变为"ipestray".编写一个函数,将一串字母转换为Pig-Latin翻译.
执行:
-- define function to detect vowel
isVowel :: Char -> Bool
isVowel c = elem c ['u','e','o','a','i']
-- define function Latin Pig
lp ::String -> String
lp str = if (isVowel (head str)) then do {str ++ "yay"}
else
do {
str ++ (head str)
tail str
lp str
}
Run Code Online (Sandbox Code Playgroud)
问题:到目前为止,我没有看到我的代码(逻辑)有任何问题.老实说,这是我为Haskell课程介绍的作业.但编译器给我错误:
**Couldn't match expected type `t0 -> t1 -> t2 -> t3 -> [Char]'
with actual type `Char'
Expected type: [t0 -> t1 -> t2 -> …Run Code Online (Sandbox Code Playgroud)