在Clojure Koans中:fin用于atoms.clj.这是一个例子:
(def atomic-clock (atom 0))
"Atomic atoms are atomic"
(= 20 (do
(compare-and-set! atomic-clock 100 :fin)
@atomic-clock))
Run Code Online (Sandbox Code Playgroud)
我理解:fin是新的价值.但为什么要使用而不是数字呢?
我搜索了文档:fin正在使用,除了在Koans之外无法找到它的用途.
谢谢.
我有一个定义变量的程序 int data
该程序用于 scanf("%d",&data)从stdin读取数据.如果来自stdin的数据不是整数,我必须打印错误消息.
我试过了 if(scanf("%d",&data) ==EOF){ printf("error");return 1;}
它对我没用.那么,我如何确定scanf是否失败或成功?
我错过了关于defmulti和defmethod的重要观点.我读过几本书对defmulti的解释,我仍然感到困惑.
我想得到一个随机值,取决于它是一个交易还是100.00这样的金额
我想调用(random-val)并返回avail-trans值或随机小数.我已经尝试将函数放在一个映射中,但是我得到了相同的值,用于avail-trans,一个\ B.
(def^:dynamic map-val {:trans (random-trans) :amt (random-amount)})
Run Code Online (Sandbox Code Playgroud)
这是显示我正在做的不起作用的最小代码量.我很感激任何指针或帮助.
(def^:dynamic avail-trans [\B \W \D \A])
(defn random-trans
[]
(nth avail-trans (.nextInt random (count avail-trans))))
(defn random-amount
[]
(float (/ (.nextInt random (count (range 1 10000))) 25 )))
Run Code Online (Sandbox Code Playgroud)
以下构造不正确,但我不确定为什么或如何解决问题:
(defmulti random-val :val-type)
(defmethod random-val :trans []
(random-trans))
(defmethod random-val :amt []
(random-amount))
Run Code Online (Sandbox Code Playgroud)
调用(random-val :trans)导致此错误:
java.lang.IllegalArgumentException:multimethod'random-val'中没有用于调度值的方法:null(NO_SOURCE_FILE:0)
如果我写一个真正的引用\*STDOUT而不是类似的类型,我会得到什么*STDOUT?
我想从下面返回的序列的每个元素创建一个向量(vector.我知道(vector得到我想要的东西是错误的.它只是一个占位符.
我正在努力学习如何从三个序列中取出第一个元素并得到["abc-de-fghi"smith barney] [def-hi-jklm"ox todd],然后是第二个元素,第三个,依此类推.
谢谢您的帮助.
(defn test-key-exclusion
"This function takes csv-data1 (the includees) and tests to see
if each includee is in csv-data2 (the includeds). This function
also gathers enough other data, so that excludees (those not found),
can be identified."
[csv-data1 pkey-idx1 csv-data2 pkey-idx2 lnam-idx fnam-idx]
(let [full-row-ret (map #(ret-non-match-rows csv-data2 pkey-idx2 pkey-idx1 %1) csv-data1)
filtered-row-ret (filter (complement nil?) full-row-ret)]
filtered-row-ret
(vector (map #(nth %1 pkey-idx1 nil) filtered-row-ret)
(map #(nth %1 lnam-idx nil) filtered-row-ret) …Run Code Online (Sandbox Code Playgroud) 我的问题是如何让Clojure的一个线程宏在我的特定情况下工作?谢谢.
我收到此错误:
(IllegalArgumentException Don't know how to create ISeq from:
bene_csv.core$test_key_exclusion$fn__346 clojure.lang.RT.seqFrom (RT.java:487)
Run Code Online (Sandbox Code Playgroud)
当我调用此函数时:
bene-csv.core=> (test-key-exclusion bene-data 1 gic-data 0 2 3)
Run Code Online (Sandbox Code Playgroud)
鉴于此代码 - 没有线程宏的工作解决方案被注释掉 -
(defn ret-non-match-rows
"Expects a sequence of sequences, like what is returned from clojure-csv.
Returns nil if there's a match; else returns failing row."
[s-o-s cmp-col-idx inq-row-idx inq-row]
(let [inq-row inq-row]
(loop [[row & remain-seq] s-o-s pos 0]
(let [cmp-val (nth inq-row inq-row-idx nil)]
(cond
(not row) inq-row
(= cmp-val (nth row cmp-col-idx)) nil
:not-found …Run Code Online (Sandbox Code Playgroud) 在下面的代码片段中,如果我转到以(该行开头的第一个左括号(spit
(defn missing-accts
"Prints accounts found in one report but not the other."
[report-header mapped-data out-file]
(spit out-file (str "\n\n "
(count mapped-data)
" " report-header
"\n\n") :append true)
.
.
.
Run Code Online (Sandbox Code Playgroud)
vim突出显示第一个(和右)括号.
有没有,如果有的话,什么是vim命令会抽出整个spit命令?
谢谢.
我正在学习Clojure是如何工作的,我想知道是否有可能(只是为了理解Clojure和Lisps方言一般如何工作)来编译Clojure程序然后运行它"禁止"使用eval.
请注意,我不会问,在技术上是否可能,例如,hotpatch正在运行的Clojure程序,以便一旦编译了Clojure程序,就会抛出异常,如果eval被调用的话.
我要问的是,如果技术上可以禁止使用eval,那么大多数Clojure程序不使用REPL而不是特定的eval仍然可以工作吗?
或者是在运行时使用eval的默认/内置API /宏/函数?
我有三个.csv文件,通过在MS SQLServer中保存查询输出.我需要将这些文件加载到Informix数据库中,这需要使用尾随分隔符.使用sed很容易做到
s/$/,/g
但是,这些文件中的每一个还包含(如vim所示,但不是ed或sed)a在第一行的第一个字符位置.
我需要摆脱这个角色.它使用vim的x命令删除为一个字符.如何使用sed描述此字符,以便我可以删除它而不删除该行.
我试过了1s/^.//g,但那不行.