小编rtr*_*szk的帖子

如何自己学习Clojure方式?

我正在学习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页.

idioms clojure

5
推荐指数
1
解决办法
2232
查看次数

清理Clojure功能

来自命令式编程语言,我试图围绕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)

refactoring clojure fibonacci

5
推荐指数
3
解决办法
495
查看次数

用变量参数定义我自己的max函数

我正在学习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)

clojure variadic-functions

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

Clojure:`和〜@是什么意思?

我正在解决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)

`和〜@是什么意思?

clojure

5
推荐指数
1
解决办法
1418
查看次数

播放框架2.1和Ebean:@ManyToOne和@OneToMany,CRUD和级联问题

我想知道的是:当我删除类别时,可以删除所有相关文章,当我删除文章时,也可以删除它的相关类别.

我设置了映射关系@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)

ebean playframework-2.1

5
推荐指数
1
解决办法
2288
查看次数

如何使用Ebean查询具有onetomany和manytoone关系的表

我正在使用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,如何

  • 检索项目列表的所有子项目?

  • 检索项目的所有微型项目?

  • 给定一个子项目列表,如何检索所有的微型项目?

java orm playframework ebean

5
推荐指数
1
解决办法
2149
查看次数

如何格式化选择标记内的选项值文本?

我有一个表项列表,当按下复制按钮时,所有表项连接到一个文本框,被选中,并放在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:&nbsp;' + document.data_entry.name.value …
Run Code Online (Sandbox Code Playgroud)

html html-select

5
推荐指数
1
解决办法
5529
查看次数

当它们不应该使用整数和双精度时给出不同的答案

我正在使用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)

java iteration math double integer

5
推荐指数
1
解决办法
108
查看次数

Clojure join无法根据filter函数的结果创建一个字符串

我正在尝试编写一个函数,它接受一个字符串并返回一个过滤函数的结果(我正在解决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,没有成功.

clojure

5
推荐指数
1
解决办法
300
查看次数

Clojure:实现comp函数

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 …

clojure

5
推荐指数
3
解决办法
1998
查看次数