小编RGr*_*run的帖子

Clojure:*out*vs System/out

我正在尝试将我用Java编写的一个小型控制台程序翻译成Clojure,但是我在弄清楚Clojure的标准*out*var和对象之间的区别时遇到了一些麻烦System/out.我的印象是他们是同一个东西,但在我的测试中,他们似乎是不同的.

在我的程序中,我提示用户输入一个数字,我希望提示和输入文本在同一行.在Java中,我打印了提示,System.out.print()然后扫描仪读取输入.

以下是我在Clojure中首次尝试类似的事情.虽然print函数看起来应该在它之前触发read-line,但它会立即阻塞输入并在混乱之后打印所有内容:

(defn inp1 []
    (print "Enter your input: ")
    (let [in (read-line)]
        (println "Your input is: " in)))
Run Code Online (Sandbox Code Playgroud)

以下是我的下一次尝试,使用*out*.它遇到与上述功能相同的问题:

(defn inp2 []
    (.print *out* "Enter input: ")
    (let [i (read-line)]
        (println "You entered: " i)))
Run Code Online (Sandbox Code Playgroud)

在我的第三次尝试中,我终于通过System/out直接使用来实现它:

(defn inp3 []
    (let [o System/out]
        (.print o "Enter input: ")
        (let [i (read-line)]
            (println "You entered: " i))))
Run Code Online (Sandbox Code Playgroud)

我很高兴我终于得到了它的工作,但我很困惑,为什么第三个工作方式是我想要的方式,而前两个没有.为什么前两个会立即阻止?任何人都可以对此有所了解吗?

clojure

7
推荐指数
1
解决办法
707
查看次数

使用 postgres row_number() 窗口函数获取最后一行

我正在学习 postgres windows 函数,但在转换此 SQL 查询时遇到了一些麻烦。

现在,我的查询返回窗口函数结果中的第一行,我想让它返回最后一行。我不能像使用“第一个结果”那样使用简单的整数,因为每个结果都有不同的行数。

这是查询:

select * from (select *, row_number() over (partition by user_id) as row_number from photos) as rows where row_number = 1 and deleted = false

我希望能够指定row_number = last_row()或类似的东西。那可能吗?

postgresql

4
推荐指数
1
解决办法
4890
查看次数

Clojure循环/复发模式,使用不好?

我正在学习Clojure,我正在使用4Clojure 作为资源.我可以解决网站上的许多"简单"问题,但对于我来说,在函数式编程思维中思考仍然不自然(我来自Java).因此,我在大多数seq构建实现中使用循环/重复迭代模式,因为这是我以前的思考方式.

但是,当我看到更有经验的Clojure用户的答案时,他们会以更实用的方式做事.例如,在实现范围函数的问题中,我的答案如下:

(fn [start limit]
  (loop [x start y limit output '()]
    (if (< x y)
      (recur (inc x) y (conj output x))
      (reverse output))))
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但其他用户做了这样的事情:

(fn [x y] (take (- y x) (iterate inc x)))

我的功能更冗长,我不知道甚至存在"迭代"功能.但是从效率的角度来看,我的回答是否更糟?循环/重复使用比替代品更糟糕吗?我担心将来会发生很多这样的事情,因为还有许多函数,比如我不知道的迭代.

clojure

3
推荐指数
1
解决办法
1554
查看次数

附加到Clojure循环中的数组

我正在尝试编写一个函数来将0和50之间的所有3和5的倍数相加,但是当我告诉它时,Clojure似乎决定不将正确的值添加到我的列表中.

(conj toSum counter)表单应该将当前数字附加到toSum数组,并且当循环退出时,(reduce + toSum)表单应该将数组中的所有内容一起添加.

就目前而言,当reduce调用函数时,toSum它总是为空的,因为conj函数没有按照它应该做的那样做.我必须搞砸我的逻辑,但我似乎无法弄明白.

(defn calculate [target]
  (loop [counter target
         toSum []]
        (if (= 0 counter)
            (reduce + toSum)
          (if (or (= 0 (mod counter 3)) (= 0 (mod counter 5)))
              (do (conj toSum counter)
                  (println toSum)
                  (recur (dec counter) toSum))    
            (recur (dec counter) toSum)))))
Run Code Online (Sandbox Code Playgroud)

clojure

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

传递给函数时,Javascript,Array不再是数组

我正在尝试编写一个显示一系列客户评价的脚本,按顺序切换每个客户评价的可见性.我正在尝试使用队列来执行此操作,并被告知使用常规Javascript数组,该数组具有方法push()shift()启用队列功能.但是,当我尝试将数组传递给我编写的函数时,我收到此错误:

TypeError: q.shift is not a function
Run Code Online (Sandbox Code Playgroud)

所以,不知何故,我传入函数的数组不再是某个数组.可以通过Javascript更有经验的人解释为什么会这样吗?

码:

function testimonials(q) {
       var e = q.shift();

       jQuery(e).fadeToggle("slow", testimonials(q.push(e)));

}

jQuery(document).ready(function() {

    var elements = jQuery(".fade-text").toArray();

    var queue = [];

    // add to queue
    for (i = 0; i  < elements.length; i++) {
        queue.push(elements[i]);
    }

    testimonials(queue);
});
Run Code Online (Sandbox Code Playgroud)

javascript arrays jquery

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

标签 统计

clojure ×3

arrays ×1

javascript ×1

jquery ×1

postgresql ×1