如何创建一个懒惰的随机数序列?
我目前的代码:
(import '(java.util Random))
(def r (new Random))
(defn rnd [_]
(.nextInt r 10))
(defn random-numbers [max]
(iterate #(.nextInt r max) (.nextInt r max)))
(println (take 5 (random-numbers 10)))
Run Code Online (Sandbox Code Playgroud)
执行它会抛出异常:
(线程"main"中的异常clojure.lang.ArityException:在clojure.lang上的clojure.lang.AFn.throwArity(AFn.java:437)传递给:user $ random-numbers $ fn的args(1)错误的数量. AFn.invoke(AFn.java:39)在clojure.lang.LazySeq.seq的clojure.lang.LazySeq.sval(LazySeq.java:42)的clojure.core $ iterate $ fn__3870.invoke(core.clj:2596) (LazySeq.java:60)位于clojure.core $ seq.invoke(core.clj:133)的clojure.RT.seq(RT.java:466),位于clojure.core $ take $ fn__3836.invoke(核心. clj:2499)在clojure.lang.LazySeq.seq(LazySeq.java:42)的clojure.lang.LazySeq.seq(LazySeq.java:60)的clojure.lang.Cons.next(Cons.java:39)at clojure.core $ next.invoke(core.clj:64)位于clojure.core $ nthnext.invoke(core.clj:2752)的clojure.core $ print.sexttial(pd.java:580) .invoke(core_print.clj:57)at clojure.core $ fn__4990.invoke(core_print.clj:140)at clojure.lang.MultiFn.invoke(MultiFn.java:167)at clojure.core $ pr_on.invoke(core. clj:3264)在clojure.core $ pr.invoke(core.clj:3276)的clojure.lang.AFn.appl yToHelper(AFn.java:161)位于clojure.core $ Rest.nvoke(core.clj:600)的clojure.core $ resn.doInvoke(core.clj:600)中的clojure.lang.RestFn.applyTo(RestFn.java:132) :3309)在clojure.core(RestFn.java:137)的clojure.core $ apply.invoke(core.clj:600)at clojure.core $ println.doInvoke(core.clj:3329)at clojure用户$ eval7.invoke(testing.clj:12)的.lang.RestFn.invoke(RestFn.java:408)位于clojure.lang.Compiler.eval(Compiler.java:6465)的clojure.lang.Compiler.load( …
对不起,这需要一点解释.我试图让它变得尽可能简单.
我想做什么: 我可视化高度场.高度字段可以具有多个补丁.贴片是一种较小的纹理,可以改变高度字段.
我正在使用OpenGL 4.0,主要是tesselation着色器.但是对于这个问题,这应该是无关紧要的.
什么工作已经完成. 我有高度字段(没有补丁)的可视化工作.关于该问题的有趣部分是细分评估着色器和片段着色器.
该镶嵌评价着色器读取每个顶点从高度场采样高度.
layout(quads, fractional_odd_spacing, ccw) in;
out float onEdge;
out float teDistanceToMinHeight;
out vec4 tcPosition;
void main()
{
// bilinear interpolate: position
vec4 pos_a = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);
vec4 pos_b = mix(gl_in[3].gl_Position, gl_in[2].gl_Position, gl_TessCoord.x);
vec4 position = mix(pos_a, pos_b, gl_TessCoord.y);
// bilinear interpolate: hf texture coordinate
vec2 tex_a = mix(gl_in[0].gl_TexCoord[HFTexCoordID].xy, gl_in[1].gl_TexCoord[HFTexCoordID].xy, gl_TessCoord.x);
vec2 tex_b = mix(gl_in[3].gl_TexCoord[HFTexCoordID].xy, gl_in[2].gl_TexCoord[HFTexCoordID].xy, gl_TessCoord.x);
vec2 hfTexCoord = mix(tex_a, tex_b, gl_TessCoord.y);
float height = getHeightFieldHeight(hfTexCoord);
position.y = …Run Code Online (Sandbox Code Playgroud) 我是Qt的新手.所以我开始重新实现一个入门示例:链接.
但是我关闭窗口时会收到SIGABRT信号.其原因很明显是由于一些内存管理错误.
您可以在下面找到callstack和相关代码.该行editWindow.setLayout(&layout);导致错误.布局类是否在销毁时删除小部件,因此要求拥有它们?
什么是这种行为的原因?以及如何解决它?
最好的祝福.
信息
调用

资源
QPushButton testButton("Test");
QVBoxLayout layout;
layout.addWidget(&testButton);
QWidget editWindow;
// the following line is the source of the error
editWindow.setLayout(&layout);
editWindow.show();
int val = app.exec();
Run Code Online (Sandbox Code Playgroud)