为什么会出现maxBound的Char?如果Char是字符,那么为什么它用数字解释,如果它不是数字是什么意思?
> maxBound :: Char
'\1114111'
Run Code Online (Sandbox Code Playgroud) max' :: Int -> Int -> Int
max' a b = if a >= b then a else b
Run Code Online (Sandbox Code Playgroud)
你看到函数是正确的,但如果我写
let a = 3,
let b = 3
Run Code Online (Sandbox Code Playgroud)
如果我写的话
ghci> a == b => True
Run Code Online (Sandbox Code Playgroud)
所以它比较了它们为什么它在我的功能中没有比较
ghci> max' a b
Run Code Online (Sandbox Code Playgroud)
错误发生的原因?或者写它的正确方法是什么?
对不起,我是初学者,如果我的问题是愚蠢的原谅我并编辑它,如果有需要,谢谢
<interactive>:19:6:
Couldn't match expected type `Int' with actual type `Integer'
In the first argument of max', namely `a'
In the expression: max' a b
In an equation for `it': it = max' a b
<interactive>:19:8:
Couldn't match expected …Run Code Online (Sandbox Code Playgroud) 通常当我创建函数时,我不知道在哪些函数中使用类型类(等等)更好Eq,Integral因为有时候不需要像以下那样使用它们:
factorial :: Int -> Int
bla bla bla
bla bla bla
Run Code Online (Sandbox Code Playgroud)
和
factorial :: (Integral a) => a -> a
bla bla bla
bla bla bla
Run Code Online (Sandbox Code Playgroud)
我相信第二个只是花时间和地点但是在elem函数中写入是很重要的Eq(下面elleme是elem)
elemme :: Eq a => a -> [a] -> Bool
y `elemme` [] = False
y `elemme` (x:xs) = if y == x then True else y `elemme` xs
Run Code Online (Sandbox Code Playgroud)
请告诉我一些事情.谢谢.
agrupa :: String -> [(Char,Int)]
agrupa [ ] = [ ]
agrupa (x:xs) = let (l1, l2) = span' (==x) xs
in (x, (length l1) + 1) : agrupa l2
span' :: (a->Bool) -> [a] -> ([a],[a])
span' p l = (takeWhile p l, dropWhile p l)
Run Code Online (Sandbox Code Playgroud)
这个函数得到一个字符串,并给我们每个字符有多少?
我的问题是有关1的(length l1) + 1,我们为什么需要它?如果你用不同的例子解释它,我真的很感激,因为这样的情况(比如+ 1)我在扫描中已经看过很多次(或者只调试agrope部分)这个功能看看它是如何工作的?
谢谢你的时间
haskell ×4