我需要迭代List但循环方式.我还需要在列表中添加新元素并迭代所有元素(旧元素和新闻元素),我该怎么做?它们有任何数据结构吗?
在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) 我最近被一个带有密钥类型的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...)
作为一个新手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) 我有一个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)
有人可以帮我实现吗?
我想重复将某些函数应用于某个状态,直到条件成立为止.
函数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)
但我正在寻找一个核心库函数(或某些函数组合),它们以相同的内存效率执行相同的操作.
我有一个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) 有没有人有任何建议让这更多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) 我有兴趣为Microsoft Kinect控制台编写一些自制代码.我有一些应用程序,我认为可以很好地平移到平台.我一直在想用OpenKinect驱动程序和库来试一试.显然这将是很多工作,但我想知道多少.有没有人有OpenKinect的经验?您是否只从设备获得原始视频/音频数据,或者是否有人编写更高级别的抽象来使常见任务更容易?