在Scheme I中我习惯做这样的事情
(define (f x) (g x))
(define (g x) (+ x 42))
(g 0)
Run Code Online (Sandbox Code Playgroud)
也就是说,我习惯用其他瞬间无界函数来定义函数.为什么在Clojure中不可能这样做?例如,在Clojure REPL上,以下内容无效
(defn f [x] (g x))
(defn g [x] (+ x 42))
(g 0)
Run Code Online (Sandbox Code Playgroud) 我有一个哈希表
(setf ht (make-hash-table))
里面包含了一些项目,例如(setf (gethash 'first ht) 'first-value)
,(setf (gethash 'second ht) 'second-value)
,...
此外,我有一个test
arity 的谓词,评估为T
或NIL
.我想检查哈希表的所有第一个条目是否ht
满足test
谓词.例如,如果哈希表只包含上面给出的两个条目,我想知道它的评估(and (test 'first) (test 'second))
.有一个简单的方法吗?
为什么函数compose
在解释器中csi
而不是在编译器中定义csc
?我知道我可以很容易地自己定义它,但我只是想知道为什么会有这样的差异.
如果我尝试(expt 123456 123456)
在Chicken Scheme(使用数字扩展名)和Clisp中评估表达式,则需要相当长的时间(在Clisp中更多).所以,我认为,评估的表达(/ (expt 123456 123456) (expt 123456 123456))
至少需要两倍的时间,因为解释必须评估两倍的电源功能,然后必须评估师.但是,令人惊讶的是,两位口译员的答案几乎是瞬间出现的.到底是怎么回事?怎么可能?确切地说,这个表达式是如何评估的?
简单的代码
(reduce concat (take 10000 (repeat '(1))))
Run Code Online (Sandbox Code Playgroud)
导致StackOverflowError.假设我有一个很大的列表列表,就像我在这个例子中获得的列表一样take
.我怎么能在我尝试的时候将它们合并到一个列表中?
我有一个同类的地图列表,如下所示
({:x 1 :y 2} {:x 3 :y 5} {:x 1 :y 7} {:x 2 :y 0} {:x 3 :y -1})
Run Code Online (Sandbox Code Playgroud)
我想:y
用相等的值来对这些对的值求和:x
.我的意思是,我想要一个函数y-adder
,如果应用于前面的列表给出列表(顺序无关紧要,它可以是一个集合而不是列表)
({:x 1 :y 9} {:x 3 :y 4} {:x 2 :y 0})
Run Code Online (Sandbox Code Playgroud)
我写的是以下内容:
(defn y-adder [Ps]
(let [xs (set (map :x Ps))]
(let [y+ (fn [v] (apply + (map :y (filter #(= (:x %) v) Ps))))]
(map #(hash-map :x % :y (y+ %)) xs))))
Run Code Online (Sandbox Code Playgroud)
它有效,但对于这么简单的任务来说似乎过于复杂.所以我想知道是否有更简单(也许更有效)的解决方案.
我正在测试collect
流的方法。在这段代码中,我试图通过StringBuilder
在第一种情况下使用 a并String
在第二种情况下使用连接来从字符串流构建单个字符串。我不明白为什么第二种情况会产生一个空字符串。
String[] strs = new String[] {"aaaaa", "bbbbbbb", "c", "dd"};
StringBuilder sb = Arrays.stream(strs).collect(StringBuilder::new, StringBuilder::append, StringBuilder::append);
System.out.println(sb);
String s = Arrays.stream(strs).collect(String::new, String::concat, String::concat);
System.out.println(s);
Run Code Online (Sandbox Code Playgroud) clojure ×3
scheme ×3
common-lisp ×2
lisp ×2
collect ×1
hashtable ×1
java ×1
java-stream ×1
math ×1