我正在学习Clojure使用教程并遇到像4clojure和99个lisp问题这样的问题.我解决问题很好,但我的代码似乎总是像下面的例子一样混乱.
对于像Clojure一样灵活的语言,初学者如何在不让其他人一直牵着的情况下学习惯用的方法?
我的烂摊子的一个例子:
(defn intersectall [lset]
(when-not (empty? (first lset))
(if (reduce #(and %1 %2) (map #(stars/member* (front lset) %) (rest lset)))
(cons (front lset) (intersectall (cons (rest (first lset)) (rest lset))))
(intersectall (cons (rest (first lset)) (rest lset))))))
Run Code Online (Sandbox Code Playgroud)
如果您想知道,该函数intersectall只返回所有输入子列表中的公共元素列表.
因此对于:
(def lset '((6 :pears :and)
(3 :peaches :and 6 :peppers)
(8 :pears :and 6 :plums)
(:and 6 :prunes :with some :apples)))
=> (intersectall lset)
(6 :and)
Run Code Online (Sandbox Code Playgroud)
这个问题来自The Little Schemer第117页.
来自命令式编程语言,我试图围绕Clojure,希望将其用于其多线程功能.4Clojure的
一个问题是编写一个函数,生成一个长度为N的Fibonacci数列表,对于N> 1.我写了一个函数,但是由于我的背景有限,我想知道是否这是一个函数最好的Clojure做事方式.代码如下:
(fn fib [x] (cond
(= x 2) '(1 1)
:else (reverse (conj (reverse (fib (dec x))) (+ (last (fib (dec x))) (-> (fib (dec x)) reverse rest first))))
))
Run Code Online (Sandbox Code Playgroud) 我正在学习Clojure解决4clojure上列出的问题.其中一个练习是max使用变量参数创建自己的函数.
我正在尝试使用REPL解决这个简单的问题,我得到了这个解决方案:
(defn my-max
[first & more] (calc-max first more))
(defn calc-max
[m x]
(cond (empty? x) m
(> (first x) m) (calc-max (first x) (rest x))
:else calc-max m (rest x)))
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但练习不允许使用,def因此我必须将两个功能合二为一.当我calc-max用它的代码替换引用时,结果是:
(defn my-max
[first & more]
((fn calc-max
[m x]
(cond (empty? x) m
(> (first x) m) (calc-max (first x) (rest x))
:else calc-max m (rest x)))
first more))
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用并返回下一个错误:
user=> (my-max 12 3 4 5 612 3)
java.lang.ClassCastException: …Run Code Online (Sandbox Code Playgroud) 我正在解决4Clojure的问题.
我有一个Tic-Tac-Toe练习的工作解决方案,但我无法理解Darren的解决方案:
(fn [b]
(some (fn [p] (first (keep #(if (apply = p %) p)
`(~@b ; <- What is that ` and ~@?
~@(apply map list b) ;
~(map get b [0 1 2])
~(map get b [2 1 0])))))
[:x :o]))
;b is a two-dimensional vector
Run Code Online (Sandbox Code Playgroud)
`和〜@是什么意思?
我想知道的是:当我删除类别时,可以删除所有相关文章,当我删除文章时,也可以删除它的相关类别.
我设置了映射关系@ManyToOne,@OneToMany(cascade = CascadeType.ALL, mappedBy = " category")就像下面的代码一样,但是当我进行单元测试时,出现了几个问题,它不起作用.这是我的代码:
@Entity
public class Article extends Model {
@Id
public Long id;
@Constraints.Required
public String title;
@Constraints.Required
@Lob
@Basic(fetch = FetchType.LAZY)
public String content;
public boolean published = false;
@Formats.DateTime(pattern="yyyy-MM-dd")
public Date publishDate;
@ManyToMany(cascade = CascadeType.REMOVE)
@Column(nullable = true)
public List<Tag> tags = new ArrayList<Tag>();
@ManyToOne
@Column(nullable = true)
public Category category;
public static Finder<Long, Article> finder = new Finder<Long, Article>(Long.class, Article.class);
public Article(String title, String content, Tag[] tags) …Run Code Online (Sandbox Code Playgroud) 我正在使用Play Framework 2.1.0和Ebean,在查询下面列出的以下场景时遇到问题:
我有3个类来表示数据库中的表.
class project {
...
@OneToMany
public SubProject sub;
}
class SubProject {
...
@ManyToOne
public Project project;
@OneToMany
public MiniProject mini;
}
class MiniProject {
...
@ManyToOne
public SubProject sub;
}
Run Code Online (Sandbox Code Playgroud)
使用Ebean,如何
检索项目列表的所有子项目?
检索项目的所有微型项目?
给定一个子项目列表,如何检索所有的微型项目?
我有一个表项列表,当按下复制按钮时,所有表项连接到一个文本框,被选中,并放在Windows剪贴板上.
框的格式如下:
<tr>
<td>Name of Person:</td>
<td><textarea name="name" rows="2" cols="30" id="name"></textarea></td>
</tr>
<tr>
<td>Type of Service:</td>
<td><select name="drop1" id="txt_drop1">
<option value="">None</option>
<option value="Type of Service: Minimal">Minimal</option>
<option value="Type of Service: Normal">Normal</option>
<option value="Type of Service: Full">Full</option>
<option value="Type of Service: Premium">Premium</option>
</select></td>
</tr>
<tr>
<td>Dollar Amount:</td>
<td><textarea name="amount" rows="1" cols="30" id="txt_info2"></textarea></td>
</tr>
<tr>
<td><textarea name="bigtextbox" rows="5" cols="30" id="txt_info2"></textarea></td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我需要的是格式化,因为当按下复制按钮时,生成的文本以一种整洁的方式连接起来.我可以这样做:
姓名:John
服务类型:全额
:125美元
但如果在下拉框中没有选择任何选项,我也需要不换行,如下所示:
姓名:约翰
金额:125美元
而不是:
姓名:John
金额:125美元
有没有办法将格式代码(例如'\n')应用于选项的值?现在,在单击复制按钮后,所有非框文本框都在连接代码中格式化,例如:
<input type="button" style="font-weight:bold;" name="clipboard_copy" value="Copy" onClick="document.data_entry.bigtextbox.value = 'Name: ' + document.data_entry.name.value …Run Code Online (Sandbox Code Playgroud) 我正在使用java 解决Project Euler Problem 14.我不是要求帮助解决问题.我已经解决了,但我遇到了一些我无法弄清楚的事情.
问题是这样的:
为正整数集定义以下迭代序列:
n = n/2,如果n是
n = 3n + 1,如果n是奇数使用上面的规则并从13开始,我们生成以下序列:
13 - > 40 - > 20 - > 10 - > 5 - > 16 - > 8 - > 4 - > 2 - > 1.这里,链的长度是10个数.
找到产生最长链的1,000,000以下的起始编号.
所以我写了这段代码:
public class Euler014 {
public static void main(String[] args){
int maxChainCount = 0;
int answer = 0;
int n;
int chainCount = 1;
for(int i = 0; i < 1000000; i++){
n = …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个函数,它接受一个字符串并返回一个过滤函数的结果(我正在解决4clojure问题).结果也必须是字符串.
我写过:
(fn my-caps [s]
(filter #(Character/isUpperCase %) s))
(my-caps "HeLlO, WoRlD!")
Result: (\H \L \O \W \R \D)
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试使用clojure.string/join从这个列表中创建一个字符串,如下所示:
(fn my-caps [s]
(clojure.string/join (filter #(Character/isUpperCase %) s)))
Run Code Online (Sandbox Code Playgroud)
结果是一样的.我也尝试过使用apply str,没有成功.
4Clojure 问题58表述为:
编写一个允许您创建函数组合的函数.参数列表应该采用可变数量的函数,并创建一个从右到左应用它们的函数.
(= [3 2 1] ((__ rest reverse) [1 2 3 4]))
(= 5 ((__ (partial + 3) second) [1 2 3 4]))
(= true ((__ zero? #(mod % 8) +) 3 5 7 9))
(= "HELLO" ((__ #(.toUpperCase %) #(apply str %) take) 5 "hello world"))
Run Code Online (Sandbox Code Playgroud)
这__应该由解决方案取代.
在这个问题中,comp不应该使用该功能.
我找到的解决方案是:
(fn [& xs]
(fn [& ys]
(reduce #(%2 %1)
(apply (last xs) ys) (rest (reverse xs)))))
Run Code Online (Sandbox Code Playgroud)
有用.但我真的不明白reduce这里是如何运作的.它是如何代表的(apply f_1 (apply f_2 …