- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试学习 Haskll,所以我在 Haskell 中尝试了 Project Euler 的问题 26:
http://projecteuler.net/problem=26
我对这个问题的解决方案是这样的:
answer26 = answer26' 1000
answer26' n = snd $ maximum $ map (\x -> cycleLength x [1]) [2..n - 1]
where
cycleLength n (r:rs)
| i /= Nothing = (1 + fromJust i, n)
| r < n = cycleLength n $ (10*r):r:rs
| otherwise = cycleLength n $ (r `mod` n):r:rs
where i = elemIndex r rs
最佳答案
通常不鼓励使用部分函数(可能不返回值的函数)。类似 head
的函数和 fromJust
存在是因为它们偶尔方便;您有时可以编写更短的代码,这对学习者来说更容易理解。许多函数算法都用 head
表示和 tail
和 fromJust
在概念上与 head
相同.
通常最好使用模式匹配并避免偏函数,因为它允许编译器为您捕获错误。在您的代码片段中,您仔细检查了该值从不 Nothing
,但在现实生活中的大型代码库中,代码可能已经有很多年了,有 1000 多行代码并且由许多开发人员维护。开发人员很容易重新订购一些代码而错过这样的检查。使用模式匹配,它就在代码结构中,而不仅仅是在一些任意的 Bool 表达式中。
替换您对 fromJust
的使用并不太难使用模式匹配:
answer26 = answer26' 1000
answer26' n = snd $ maximum $ map (\x -> cycleLength x [1]) [2..n - 1]
where
cycleLength n (r:rs) = case elemIndex r rs of
Just i -> (1 + i, n)
Nothing -> if r < n
then cycleLength n $ (10*r):r:rs
else cycleLength n $ (r `mod` n):r:rs
fromJust
在
Typeclassopedia中提到,虽然你需要我以外的其他人来解释wtf那是关于..;)
关于haskell - Haskell 中 fromJust 的理由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18288568/
输入:[Just "foo", Just "bar", Nothing, Just "quux"] 输出:["foo", "bar", "quux"] 我对以下使用 fromJust 的解决方案不满意
我正在尝试学习 Haskll,所以我在 Haskell 中尝试了 Project Euler 的问题 26: http://projecteuler.net/problem=26 我对这个问题的解决方
所以我有这些功能: intercalate' :: [a] -> [[a]] -> [a] intercalate' xs xss = concat (intersperse' xs xss) int
这里是 Haskell 新手。我试图理解this来自 Haskell 的 diagrams 的示例图书馆。具体来说,有这样一行: Just t = 哪里类型为Maybe (Tree a) 我不明白这是
所以我有这些功能: intercalate' :: [a] -> [[a]] -> [a] intercalate' xs xss = concat (intersperse' xs xss) int
我是一名优秀的程序员,十分优秀!