我想在Common Lisp中并行实现我的粒子滤波算法.粒子过滤和采样可以并行化,我想为我的4核机器做这个.我的问题是并行编程是否在CL中是可行的,如果可行,是否有任何良好的读数,关于在CL中开始并行计算的教程.
我正在研究注释处理器.此代码编译:
package sand;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.lang.model.element.TypeElement;
@SupportedAnnotationTypes("sand.Foo")
public class FooProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
return false; // TODO
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我对字符串常量"sand.Foo"感到不满(在这种情况下不是太多,但对于将来会更多).
如果Foo
重命名或移动到另一个包,此代码仍将编译,但它不起作用.
我想做的事情如下:
@SupportedAnnotationTypes(Foo.class)
Run Code Online (Sandbox Code Playgroud)
这样,如果Foo的名称发生变化,编译将失败,有人必须更正文件.
但这不起作用,因为a Class
不是String
.所以我尝试过:
@SupportedAnnotationTypes(Foo.class.getName())
Run Code Online (Sandbox Code Playgroud)
但编译器并不认为这是一个常量表达式,这在此上下文中是必需的,因此也不起作用.
在编译时有没有办法将类文字强制转换为它的名字?
我正在使用javax.xml.soap
API(javax.xml.soap.SOAPConnectionFactory
,javax.xml.soap.SOAPConnection
和朋友)对远程服务器进行Web服务调用,大部分都取得了巨大的成功.
但是,有时会出现问题,程序会永远陷入困境.
为了解决这个问题,我想添加一个读取超时.
我找到了几种可能实现这一目标的方法,但它们看起来都非常糟糕.
所以我对社区的问题是:在使用javax.xml.soap API进行调用时,实现读取超时行为的最佳方法是什么?
有没有办法让SBCL在我的程序中的某一点获取CPU寄存器的值并将其打印为整数?
我必须使用gdb吗?
我正在改造旧的一些SimpleDateFormat
代码以使用新的Java 8 DateTimeFormatter
. SimpleDateFormat
,因此旧代码在日期之后接受带有其中内容的字符串,如"20130311nonsense".在DateTimeFormat
创建我抛出了一个DateTimeParseException
为这些字符串,这可能是做正确的事情,但我想保持兼容性.我可以修改我DateTimeFormat
接受这些字符串吗?
我目前正在创建它:
DateTimeFormatter.ofPattern("yyyyMMdd")
Run Code Online (Sandbox Code Playgroud) 它应该很容易实现array.map()
,它在ECMA-262中定义,它接受一个函数,这个函数将由3个参数调用:元素值,索引,数组.
但是对于稀疏数组呢?显然,如果只有索引0,1,2和100,000具有一个元素,并且从索引3到99,999稀疏,我们不希望从索引0迭代到100,000.我可以考虑使用arr.slice(0)
或arr.concat()
克隆数组,然后输入替换值,但是如果我们不使用slice
或者concat
,还有其他方法吗?
我想出的解决方案slice()
是:
Array.prototype.collect = Array.prototype.collect || function(fn) {
var result = this.slice(0);
for (var i in this) {
if (this.hasOwnProperty(i))
result[i] = fn(this[i], i, this); // 3 arguments according to ECMA specs
}
return result;
};
Run Code Online (Sandbox Code Playgroud)
(collect
用于试用代码,因为这是map
某种语言的另一个名称)
翻译阶段2的第二部分(N3485中的第2.2.2 节)基本上说如果源文件没有以换行符结尾,编译器应该将其视为原样.
但是,如果我正确读取它,它会为空源文件做一个显式异常,它们仍为空.
确切的文字(更加强调)是:
\
删除反斜杠字符()后面紧跟一个新行字符的每个实例,拼接物理源代码行以形成逻辑源代码行.只有任何物理源线上的最后反斜杠才有资格成为此类拼接的一部分.因此,如果生成与通用字符名称的语法匹配的字符序列,则行为未定义.一个非空的并且不以换行符结尾的源文件,或者在任何此类拼接发生之前以反斜杠字符开头的新行字符结尾的源文件,应该被处理,就像另一个新文件一样 - 行字符被附加到文件中.
我无法弄清楚源文件是空的还是仅由换行符组成的任何情况都会产生影响.
我希望有人可以说明这一要求背后的原因.
我正在尝试从GPS追踪设备转换GPS数据.该公司提供了协议手册,但目前尚不清楚.我能够从设备收到的数据包中解码大部分数据.通信是通过TCP/IP进行的.我在解码经度和纬度的十六进制值时遇到问题.以下是手册中的示例:
例:22º32.7658'=(22X60 + 32.7658)X3000 = 40582974,然后转换成十六进制数40582974(十进制)= 26B3F3E(十六进制),最后该值为0x02 0x6B 0x3F 0x3E.
我想知道如何从十六进制逆转到经度和纬度.该设备将发送26B3F3E.我想知道获得22º32.7658的过程.
该协议适用于GT06和Heacent 908.
我有一组输入序列(表示为列表),对于每个输入序列,我都会生成一组其所有子序列(也包括列表)。这些子序列作为键存储在EQUAL哈希表中,并且永远不会进行垃圾回收或修改(但是,相关联的值会被修改)。
我的问题是,我目前用于实现此目的的方法使用的堆空间比我想要的要多得多。
为了弄清楚我在说什么,假设我们有一个序列:
#1=(A B C D)
Run Code Online (Sandbox Code Playgroud)
子序列为:
#2=()
#3=(A)
#4=(A B)
#5=(A B C)
#6=(A B C D)
#7=(B)
#8=(B C)
#9=(B C D)
#10=(C)
#11=(C D)
#12=(D)
Run Code Online (Sandbox Code Playgroud)
以下代码(我承认不是很好)会生成此集合(除了我实际上并不关心的空子序列):
(defun subseqs-of-length (length sequence)
(if (< (length sequence) length)
nil
(loop for start from 0 to (- (length sequence) length)
collect (subseq sequence start (+ start length)))))
(defun subseqs-of-length-< (length sequence)
(loop for len from 1 to (1- length)
append (subseqs-of-length len sequence)))
(defun all-subseqs (sequence)
(subseqs-of-length-< (1+ (length sequence)) …
Run Code Online (Sandbox Code Playgroud) common-lisp ×3
java ×3
c++ ×2
assembly ×1
c++11 ×1
concurrency ×1
constants ×1
date-parsing ×1
gps ×1
java-8 ×1
javascript ×1
lisp ×1
reflection ×1
saaj ×1
sbcl ×1
x86-64 ×1