以下代码来自Pathikrit的动态编程存储库.我的美丽和独特使我感到困惑.
def subsetSum(s: List[Int], t: Int) = {
type DP = Memo[(List[Int], Int), (Int, Int), Seq[Seq[Int]]]
implicit def encode(key: (List[Int], Int)) = (key._1.length, key._2)
lazy val f: DP = Memo {
case (Nil, 0) => Seq(Nil)
case (Nil, _) => Nil
case (a :: as, x) => (f(as, x - a) map {_ :+ a}) ++ f(as, x)
}
f(s, t)
}
Run Code Online (Sandbox Code Playgroud)
该类型Memo在另一个文件中实现:
case class Memo[I <% K, K, O](f: I => O) extends (I => …Run Code Online (Sandbox Code Playgroud) 假设我已/doc/index.html在ST3中打开,当我打开另一个文件时,/src/foo.html或者/foo/index.html/,新打开的文件覆盖现有文件/doc/index.html!也就是说,现有文件刚刚消失,并被新打开的文件替换.我怎么解决这个问题?
这是我学习Haskell的第二天,我被一个问题严重困扰.我试图解决99个Haskell问题中的第八个问题 问题是编写一个名为"compress"的函数,其工作原理如下:
>compress "aaaabbbbccccddddd"
"abcd"
>compress [1,1,1,1,2,3,4,4,4,4]
[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
这就是我写的:
compress :: (Eq a) => [a] -> [a]
compress [] = []
compress x = filter ( (head x) `notElem` ( compress $ tail x ) ) x
Run Code Online (Sandbox Code Playgroud)
编译说:
无法匹配预期类型
a -> Bool' with actual typeBool'
在compress,我试图以递归方式从头到尾拾取新元素.(比如回溯也许?)
我的算法错了吗?有没有其他方式以更易读的方式实现算法?(比如:在哪里放括号?或$)
有人可以帮助我吗?非常感谢.
感谢Lubomir的帮助,我通过以下方式纠正了我的代码:
compress'(x:xs)= x:compress'(dropWhile(== x)xs)
它的工作原理!
谢谢大家,我感到被宠坏了! 你们真好!
我会继续学习Haskell!
从这里我们开始知道一个表达式:
for( i <- 1 to 10 ) yield i + 1
Run Code Online (Sandbox Code Playgroud)
将扩展到
( 1 to 10 ).map( _+1 )
Run Code Online (Sandbox Code Playgroud)
但是下面的表达式扩展到了什么?
for( i <- 1 to 50 j <- i to 50 ) yield List(1,i,j)
Run Code Online (Sandbox Code Playgroud)
它是否正确?
( 1 to 50 ).map( x => (1 to 50 ).map(List(1,x,_))
Run Code Online (Sandbox Code Playgroud)
我对这个问题感兴趣,因为我想创建一个执行多个Xi <- Xi-1 to 50操作的函数,如下所示:
for( X1 <- 1 to 50 X2 <- X1 to 50 X3 <- X2 to 50 ..... Xn <- Xn-1 to 50 )
yield …Run Code Online (Sandbox Code Playgroud)