我是Haskell的新手,我想写一个简单的函数来计算字符串中子字符串的出现次数.
例如:"There is an apple"我想计算"is"句子中的次数,在这种情况下结果应该是1.
这就是我尝试过的:
countOf :: String -> Int
countOf x = length [n | n <- words x, filter "is" x]
Run Code Online (Sandbox Code Playgroud)
根据我所研究的它应该有效,但事实并非如此.我真的不知道如何解决问题,也不知道我得到的错误信息是什么意思:
input:1:41:
Couldn't match expected type `Bool' with actual type `[a0]'
In the return type of a call of `filter'
In the expression: filter "a" x
In a stmt of a list comprehension: filter "a" x
Run Code Online (Sandbox Code Playgroud) 我在Haskell中使用两个功能:
基本上我想在匹配给定字符串中的特定字符之前获取字符
这是我的代码:
before :: Char -> [Char] -> Char
before x str = trackelement x ' ' str
trackelement :: Char -> Char -> [Char] -> Char
trackelement x y (z:zs)
| x == z = y
| otherwise = trackelement x z (zs)
Run Code Online (Sandbox Code Playgroud)
我的问题是当我尝试: before 'l' "luis"
答案是:(' '当然,在'l'没有任何东西之前),我想成为''或 Nothing
我尝试通过trackelement x '' str而不是trackelement x ' ' str但我遇到此错误Syntax error on ''str
你能给我一些建议吗?
我有一个名为MyDatahas has __mul__和__rmul__defined 的类(以及所有其他算术运算符).无论何时使用这些方法,它都应该返回一个类型的值MyData.但是,我发现它a * myDataObj不一样myDataObj * a,取决于它的类型a.具体来说,如果a是int,它工作正常,但如果a是,float那么第一个配置返回一个数组(我的对象有一个numpy数组作为成员,并MyData.__getitem__返回该数组的切片),第二个配置返回正确的类型值MyData.
有没有办法在这样的表达式中确定运算符的调用顺序?
我正在寻找一个函数,例如,它给了我所有匹配的字母数字 giveNumber "D" [("D", 5), ("A", 4) ("D", 25)] = [5,25]
giveNumber :: String -> [(String, a)] -> [a]
giveNumber letter (x:xs) = [snd x | x <- xs | fst x == letter]
Run Code Online (Sandbox Code Playgroud)
我得到一个解析器错误...谢谢
我需要一些帮助,试图理解为什么这些定义
data SegmentList
= SegmentList SegmentlistHeader [Segment]
| AugmentedSegmentList SegmentlistHeader [AugmentedSegment]
deriving (Show)
data SegmentlistHeader
= SegmentlistHeader DatabaseName Query LabelType TimeStamp
deriving (Show)
data Segment
= Segment SegmentLabel SegmentStart SegmentEnd Session Checksum
| AugmentedSegment SegmentLabel SegmentStart SegmentEnd Session Checksum Metadata
deriving (Show)
type DatabaseName = String
type SegmentLabel = String
type SegmentStart = Double
type SegmentEnd = Double
type Session = String
type LabelType = String
type Query = String
type TimeStamp = String
type Checksum = String
type Metadata …Run Code Online (Sandbox Code Playgroud) 所以我在尝试将中国剩余定理实现到Haskell时遇到了问题.到目前为止我有这个:
minv :: Integer -> Integer -> Integer
minv a m = let (1, x, _) = extGCD a m
in x `mod` m
crt :: [Integer] -> [Integer] -> Integer
crt as ms = let
prod = product ms
big_m = [div prod i| i <- ms]
in (zip as ms (\(ai,mi)) ((ai * big_m * (minv mi big_m)) `mod` prod))
Run Code Online (Sandbox Code Playgroud)
好的,所以我知道这个minv功能有效(我已多次测试过),但我无法使用该crt功能.所以这就是我想要做的:
我需要压缩列表as和ms在一起,然后应用二进制文件中的每一个,实际上认定中国剩余定理公式.但是我需要先处理二进制文件然后应用于`mod` prod我从所有二进制文件中获得的整数.
希望这会产生某种形式的意义.
提前致谢.
我想编写一个消耗Either值的函数和两个函数.它仅应用基于哪一个与内部类型兼容的功能.完全努力实施这一个.
mapAorB :: (x -> z) -> (y -> w) -> Either x y -> Either z w
Run Code Online (Sandbox Code Playgroud) 我是haskell的新手,我正在尝试理解本文档中用于创建Monadic解析器的方法https://www.cs.nott.ac.uk/~gmh/pearl.pdf
我没有完全遵循它,而是试图以不同的方式做到这一点,以便正确理解它,因此,我最终得到了这段代码
newtype Parser a = Parser (String -> Maybe (a, String))
item :: Parser Char
item = Parser (\cs -> case cs of
"" -> Nothing
(c:cs) -> Just (c, cs))
getParser (Parser x) = x
instance Monad Parser where
return x = Parser (\cs -> Just (x,cs))
(Parser p) >>= f = Parser (\cs -> let result = p cs in
case result of
Nothing -> Nothing
Just (c,cs') -> getParser (f c) cs')
takeThreeDropSecond :: Parser …Run Code Online (Sandbox Code Playgroud) 在python中,有许多IDE可以让你这样做.
>>> if (a==5):
print "Yes"
else:
print "No"
Run Code Online (Sandbox Code Playgroud)
但是在haskell的GHCi中:
Prelude> do
<interactive>:2:1: Empty 'do' block
Run Code Online (Sandbox Code Playgroud)
这是行不通的.是否有任何IDE允许您以交互模式执行多行命令.
注意:我知道:{和:}命令,但您输入后无法编辑上面的行.
我正在新学习Haskell,并且在之前提出的类似问题的帮助下,我达到了以下代码,但是我收到了一个错误 -
Couldn't match type ' [ ] ' with ' IO '.
Expected type - IO Char
Actual type - [Char]
Run Code Online (Sandbox Code Playgroud)
import Data.Set
removeDups :: Ord a => [a] -> Set a -> [a]
removeDups [] sofar = []
removeDups (x:rest) sofar
| member x sofar = (removeDups rest sofar)
| otherwise = x:(removeDups rest (insert x sofar))
main = do
name <- getLine
removeDups name empty
Run Code Online (Sandbox Code Playgroud)