小编dby*_*rne的帖子

迭代循环方式

我需要迭代List但循环方式.我还需要在列表中添加新元素并迭代所有元素(旧元素和新闻元素),我该怎么做?它们有任何数据结构吗?

loops scala circular-list scala-2.8

13
推荐指数
4
解决办法
4163
查看次数

将Haskell的Monadic Bind运算符添加到Scala

在Haskell中,您可以>>=像这样使用bind运算符():

repli :: [a] -> [a]
repli xs = xs >>= \x -> [x,x]

*Main> repli [1,2,3]
[1,1,2,2,3,3]
Run Code Online (Sandbox Code Playgroud)

我读过flatMapScala的绑定运算符:

def repli [A](xs: List[A]): List[A] =
  xs.flatMap { x => List(x,x) }

scala> repli (List(1,2,3))
res0: List[Int] = List(1, 1, 2, 2, 3, 3)
Run Code Online (Sandbox Code Playgroud)

作为一个教学练习,我正在尝试添加>>=对Scala的支持:

class MyList[T](list: List[T]) {
  def >>= [U](f: T => List[U]): List[U] = list.flatMap(f)
}
implicit def list2mylist[T](list: List[T]) = new MyList(list)

def repliNew [A](xs: List[A]): List[A] =
  xs >>= { …
Run Code Online (Sandbox Code Playgroud)

monads haskell scala implicit-conversion

12
推荐指数
2
解决办法
3056
查看次数

Java:尝试使用错误类型作为Map键时的编译器或Eclipse警告

我最近被一个带有密钥类型的Map的bug所困Long,但我试图将它与类型的密钥一起使用String.我基本上有类似的东西:

Map<Long, Object> map;
...
String wrongType;
if (map.containsKey(wrongType)) {
    // Do something
} else {
    // Do something different
}
Run Code Online (Sandbox Code Playgroud)

因为映射中的所有键都是Long类型,所以代码总是执行else块.

由于containsKey和get方法采用类型的参数,因此Object可以接受任何旧类型的对象而不会抱怨.

我的困惑源于这样一个事实:在我们的系统中,同一个实体以两种不同的方式表示(有时作为a Long,有时作为a String); 我不能轻易改变这一点.有没有什么方法可以在开发时而不是在测试期间捕获这样的错误?也许是一个编译器标志或一些Eclipse选项,它更聪明一些我应该使用的方法containsKey和get方法(以及它们的类似物Set...)

java eclipse generics

10
推荐指数
2
解决办法
682
查看次数

项目Euler#14和Clojure中的memoization

作为一个新手clojurian,我建议我将项目Euler问题作为学习语言的一种方式.它绝对是提高技能和获得信心的好方法.我刚刚完成了问题#14的答案.它工作正常,但为了让它有效运行,我必须实现一些memoization.memoize由于我的代码的结构方式,我无法使用预先打包的功能,而且我认为无论如何都是一个很好的经验.我的问题是,是否有一种很好的方法将我的缓存封装在函数本身中,或者如果我必须像我所做的那样定义一个外部缓存.此外,任何使我的代码更惯用的提示将不胜感激.

(use 'clojure.test)

(def mem (atom {}))

(with-test
  (defn chain-length      
    ([x] (chain-length x x 0))     
    ([start-val x c]
      (if-let [e (last(find @mem x))]
        (let [ret (+ c e)]
          (swap! mem assoc start-val ret)
          ret)   
        (if (<= x 1)               
          (let [ret (+ c 1)]
            (swap! mem assoc start-val ret)
            ret)                  
          (if (even? x)            
            (recur start-val (/ x 2) (+ c 1))
            (recur start-val (+ 1 (* x 3)) (+ c 1)))))))
  (is (= …
Run Code Online (Sandbox Code Playgroud)

clojure memoization

9
推荐指数
1
解决办法
1306
查看次数

枚举,用于开关盒

我有一个Enum定义,其中包含方法返回类型,如"String",Float,List,Double等.

我将在switch case语句中使用它.例如,我的枚举是

public enum MethodType {
    DOUBLE,LIST,STRING,ARRAYLIST,FLOAT,LONG;
}
Run Code Online (Sandbox Code Playgroud)

在属性文件中,我的键值对如下.Test1 = String Test2 = Double

在我的代码中,我得到了密钥的值.我需要在Switch Case中使用VALUE来确定类型,并基于此我要实现一些逻辑.例如像这样的东西

switch(MethodType.DOUBLE){
     case DOUBLE:
        //Dobule logic
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮我实现吗?

java enums

8
推荐指数
3
解决办法
3万
查看次数

在Scala中处理图像

我正在从Scala程序生成大型PNG文件.目前,我这样做的方式与我在java中的方式相同.我正在创建一个新的BufferedImage并将每个像素设置为正确的颜色.这工作正常,但我想知道是否有任何好的库在Scala中处理图像?我正在寻找像Ruby的RMagick库这样的东西.

png scala image-processing

8
推荐指数
1
解决办法
4021
查看次数

执行功能直到某些条件成立

我想重复将某些函数应用于某个状态,直到条件成立为止.

函数f采用状态,修改它并返回它.再次将f应用于返回状态,依此类推.

我认为这会奏效.

(first (filter pred (iterate f x)))
Run Code Online (Sandbox Code Playgroud)

但它有点难看.加上内存消耗并不理想,因为迭代器将被强制评估并保持中间状态,直到返回pred保持为true的状态为止,此时中间状态应该被垃圾收集.

我知道你可以编写一个简单的递归函数:

(loop [f x p] (if (p x) x (recur f (f x) p))
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一个核心库函数(或某些函数组合),它们以相同的内存效率执行相同的操作.

functional-programming clojure

8
推荐指数
2
解决办法
3887
查看次数

Android浮点数学表现

我有一个Android应用程序,它使用NDK执行大量的浮点数学运算.

我刚买了一个新的Galaxy Nexus.令我惊讶的是,我的应用程序运行速度比它应该慢得多.我怀疑这是因为大多数设备都使用硬件加速而Galaxy Nexus不是.如果我执行不需要浮点数学运算的操作,Galaxy Nexus会执行我的预期.

以下是多个设备的CPU/GPU规格和采样时序.我已经将统计数据标准化以考虑显示分辨率:

Droid
CPU: TI OMAP 3430 (ARM Cortex-A8 600 MHz underclocked to 550 MHz)
GPU: PowerVR SGX530
Instruction Set: ARMv7
Test Run: 1,980 pixels per second

Galaxy Nexus
CPU: TI OMAP 4460 (ARM Cortex-A9 dual-core 1.2 GHz)
GPU: PowerVR SGX540
Instruction Set: ARMv7
Test Run: 2,253 pixels per second

Droid Incredible
CPU: QSD8650 (Qualcomm Snapdragon 1 GHz)
GPU: Adreno 200
Instruction Set: ARMv7
Test Run: 4,571 pixels per second
Run Code Online (Sandbox Code Playgroud)

我在我的Application.mk文件中有这个配置:

APP_ABI …
Run Code Online (Sandbox Code Playgroud)

android android-ndk

7
推荐指数
2
解决办法
3803
查看次数

项目欧拉#9(毕达哥拉斯三胞胎)在Clojure

我对这个问题的回答与C中的这些解决方案非常相似.

有没有人有任何建议让这更多lispy?

(use 'clojure.test)
(:import 'java.lang.Math)

(with-test
  (defn find-triplet-product
    ([target] (find-triplet-product 1 1 target))
    ([a b target]
      (let [c (Math/sqrt (+ (* a a) (* b b)))]
        (let [sum (+ a b c)]
          (cond 
            (> a target) "ERROR"
            (= sum target) (reduce * (list a b (int c)))
            (> sum target) (recur (inc a) 1 target)
            (< sum target) (recur a (inc b) target))))))

  (is (= (find-triplet-product 1000) 31875000)))
Run Code Online (Sandbox Code Playgroud)

clojure pythagorean

6
推荐指数
1
解决办法
959
查看次数

OpenKinect成熟度

我有兴趣为Microsoft Kinect控制台编写一些自制代码.我有一些应用程序,我认为可以很好地平移到平台.我一直在想用OpenKinect驱动程序和库来试一试.显然这将是很多工作,但我想知道多少.有没有人有OpenKinect的经验?您是否只从设备获得原始视频/音频数据,或者是否有人编写更高级别的抽象来使常见任务更容易?

kinect

6
推荐指数
2
解决办法
2774
查看次数