小编Yun*_*hen的帖子

Scala Memoization:这个Scala备忘录是如何工作的?

以下代码来自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)

scala memoization dynamic-programming

24
推荐指数
1
解决办法
7637
查看次数

Sublime Text 3新打开的文件覆盖现有文件

假设我已/doc/index.html在ST3中打开,当我打开另一个文件时,/src/foo.html或者/foo/index.html/,新打开的文件覆盖现有文件/doc/index.html!也就是说,现有文件刚刚消失,并被新打开的文件替换.我怎么解决这个问题?

sublimetext3

6
推荐指数
0
解决办法
1679
查看次数

Haskell学习者关于过滤和折叠的小问题

这是我学习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!

haskell

2
推荐指数
1
解决办法
229
查看次数

如何在Scala中的多维循环中扩展到yield?

这里我们开始知道一个表达式:

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)

scala

0
推荐指数
1
解决办法
112
查看次数