我有这个代码的问题:
rango2 :: Int -> [Int] -> [[Int]] -> [Int]
rango2 a b list = if (verif (map(+list!!a!!2)(list!!a)) (map(-list!!a!!2)(list!!a)) (b)) then [1]
else [0]
verif :: [Int] -> [Int] -> [Int] -> Bool
verif a b c = if ((c!!0 < ((a!!0)+1)) && (((c!!0)+1) > b!!0) && (c!!1 < ((a!!1)+1)) && (((c!!1)+1) > b!!1)) then True
else False
Run Code Online (Sandbox Code Playgroud)
运行时,会产生以下错误:
Couldn't match type `Int' with `Int -> Int'
Expected type: [[Int -> Int]]
Actual type: [[Int]]
In the first argument of …Run Code Online (Sandbox Code Playgroud) 刚开始使用Haskell,据说Haskell有不可变的变量.那么为什么每次在GHCi提示符中输入表达式时,'it'变量都会改变其值?
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help
Prelude> 7*2
14
Prelude> it
14
Prelude> "foo"
"foo"
Prelude> it
"foo"
Prelude>
Run Code Online (Sandbox Code Playgroud) 所以我是Haskell的新手,我想弄清楚为什么我的天真实现实际上比我认为更智能的解决方案更快.
我正在尝试编写一个函数,给定一个String将返回一个Bool指示String是否使用一个且恰好是一个元音的函数.以下是我天真的实现:
singleVowel :: Maybe String -> Bool
singleVowel Nothing = False
singleVowel (Just s) = singleVowel (Just s) = length (nub $ filter (`elem` "aeiouyAEIOUY") s) == 1
Run Code Online (Sandbox Code Playgroud)
请注意,我过滤掉了元音集中没有的所有元素.然后,我使用该nub函数进行另一次传递,从筛选列表中删除重复项,并查看列表中是否只有1个元音.然后在最坏的情况下,此解决方案将使用O(n)内存和时间,因为它必须为筛选列表分配内存.
现在对于我的另一个解决方案,我决定使用递归并在每次递归调用时传递一个字符,以便在看到当前元音时跟踪当前元音.
singleVowelFaster :: Maybe String -> Bool
singleVowelFaster Nothing = False
singleVowelFaster (Just s) = singleVowelHelper s Nothing
singleVowelHelper :: String -> Maybe Char -> Bool
singleVowelHelper [] Nothing = False
singleVowelHelper [] _ = True
singleVowelHelper (x:xs) Nothing = if x …Run Code Online (Sandbox Code Playgroud) 我有一个.hs文件,其中有一个Haskell函数.我的C++程序应该运行ghci,调用函数,然后将输出写入文本文件,然后退出ghci.我认为这可以轻松完成system(),我可以用它来管理终端,并做所有这些好事.但是当我执行时system("ghci"),C++程序暂停并等待我完成Haskelling.
如何从C++运行Haskell程序?
我在为基于文本的冒险游戏的Haskell中创建项目列表时遇到一些麻烦。
("cavern",
Room.Room { Room.name = "Cavern"
, Room.description = ""
, Room.directions = Map.fromList [
(North, "hall") ]
, Room.visited = False
, Room.items = [
Item.Item { Item.name = "Trident" } ]
})
Run Code Online (Sandbox Code Playgroud)
是代码,我正在尝试向一个房间添加多个项目,但是我尝试过的任何方法似乎都无法在我使用的最接近的情况下正常工作
("cavern",
Room.Room { Room.name = "Cavern"
, Room.description = ""
, Room.directions = Map.fromList [
(North, "hall") ]
, Room.visited = False
, Room.items = [
Item.Item { Item.name = "Trident" } { Item.name = "Trident2" } ]
})
Run Code Online (Sandbox Code Playgroud)
但这就是这样,所以最后一个项目块是房间中唯一的项目
我正在尝试完成以下任务:
slice :: Int -> Int -> [a] -> [a]
slice from to xs = take (to - from + 1) (drop from xs)
trimBoard :: Board -> Int -> Board
trimBoard s y = slice ((y*3)) (((y+1)*3)-1) s
getBox :: Board -> Int -> Int -> [Sequence]
getBox s y x = [ (trimBoard c x) | c <- (trimBoard s y)]
Run Code Online (Sandbox Code Playgroud)
具体来说,我试图运行一个函数,获取结果[[int]],然后将另一个函数映射到该结果上。这似乎令人讨厌,我需要使用“ lambda函数”和我完全无法阅读或理解的其他巫术的某种组合来进行这种适应。
有没有简单的方法可以做到,而这不需要7个月的数学函数语法课程?
如上所述,结果board是[[int]],而序列只是[int]。
它产生的错误是
sudoku.hs:139:19: error:
• Couldn't match type ‘[Int]’ with ‘Int’
Expected …Run Code Online (Sandbox Code Playgroud) 我有这种类型
type Card = (CardValue,Suite)
Run Code Online (Sandbox Code Playgroud)
我想写一个函数来显示基于Card.Suite值的颜色
colour :: Card -> Colour
colour card = if card.Suite == Spades then Red else Black
Run Code Online (Sandbox Code Playgroud)
这段代码仅说明了我想要实现的目标。我不知道如何从中真正获得套间价值Card(CardValue,Suite)。
我在声明查找我的首字母缩略词的条件时遇到问题。我写的条件是:
但是当遇到像“apple apple”这样的字母时,它会返回“apape”,因为我在处理第三个条件时遇到了问题。
acronym :: String -> String
acronym [] = []
acronym [x] = [x]
acronym (x:y:xs)
| x == ' ' = y : acronym xs -- remove if 'head' is blank(space)
| y == ' ' = acronym xs -- remove both x and y if y is blank(space)
| x `elem` ['a'..'z'] || x `elem` ['A'..'Z'] && y `elem` ['a'..'z'] || y `elem` ['A'..'Z']
= x : acronym xs
| …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用该longs功能,但它不起作用:
(println (longs 1 2 3))
Run Code Online (Sandbox Code Playgroud)
任何例子?
网站上的描述不是很好,这就是为什么我遇到问题 http://clojure.org/cheatsheet
谢谢