我最近一直在做元组和元组列表的大量工作,我一直想知道我是否明智.
对我来说,事情感觉尴尬和笨重,这表明我做错了什么.
例如,我编写了三个便利函数,用于获取3个值的元组中的第一个,第二个和第三个值.
有没有更好的方法让我失踪?
是否有更多通用函数可以组合和操作元组数据?
以下是我想要做的一些事情,感觉应该是一般性的.
提取值:我是否需要为大小为二,三,四和五等的元组创建一个版本的fst,snd等...?
fst3(x,_,_) = x
fst4(x,_,_,_) = x
Run Code Online (Sandbox Code Playgroud)
操作值:你可以在一对列表中递增每个元组的最后一个值,然后使用相同的函数来递增三元组列表中每个元组的最后一个值吗?
压缩和解压缩值:有拉链和拉链3.我还需要一个zip4吗?或者是否有某种方法来创建一般的zip功能?
对不起,如果这似乎是主观的,我老实说不知道这是否可能,或者我每次需要一般解决方案时都浪费时间编写3个额外功能.
感谢您提供任何帮助!
有没有办法让GHCi在运行时发现调用产生的值与函数的模式匹配不匹配时产生更好的异常消息?
它目前给出了产生非详尽模式匹配的函数的行号,虽然有时有用但需要一轮调试,有时我觉得一遍又一遍地做同样的事情.所以在我尝试整理解决方案之前,我想看看是否存在其他问题.
除了提供行号之外的异常消息还显示了它试图进行的呼叫类型?
这甚至可能吗?
您可以推荐哪些替代方案来在Google App Engine上使用?
具体来说,我对大型矩阵的矩阵操作感兴趣.
你可以创建一个函数列表,然后按顺序执行它们,也许可以将它们传递给do notation?
我目前正在通过映射数据列表来做这件事,我想知道我是否可以以某种方式调用将结果作为一系列顺序调用传递?
我正在调用clojure.core/time,记录为"Evaluates expr并打印它所花费的时间.返回expr的值"
例如:
(time (expensive))
Run Code Online (Sandbox Code Playgroud)
宏展开它表明它确实将值存储为let,因此在输出时应该立即返回let表达式中的值.
然而,当我使用昂贵的计算进行呼叫时,我看到延迟然后得到时间,但是必须等待很长时间(有时+10秒或更长时间)才能显示结果.
谁能解释一下这里发生了什么?
PS:这是使用clojure 1.3.0,如果这有任何区别.
获取包含当前元素对的列表以及包含所有其他元素的列表的最快方法是什么?这应该很快,因为列表可能包含一百万或更多元素.
例如给出列表 (1 2 3)
我想得到清单 ((1 (2 3)) (2 (1 3)) (3 (1 2)))
谢谢你的帮助!
我正在尝试实施Land of Lisp's Dice of Doom游戏,而我正在获得一个Don't know how to create ISeq from: clojure.lang.PersistentList$1.
它在调用我的add-new-dice函数时发生:
(defn add-new-dice [board player spare-dice]
  (letfn [(f [lst n]
            (cond (empty? lst) nil
                  (zero? n) lst
                  :else (let [current-player (first (first lst))
                              current-dice (first (rest (first  lst)))]
                          (if (and (= current-player player) (< current-dice *max-dice*))
                            (cons (list current-player (+ current-dice 1))
                                  (f (rest lst) (- n 1)))
                            (cons (first lst) (f (rest list) n))))))]
    (f board spare-dice)))
Run Code Online (Sandbox Code Playgroud)
有了这个:
(add-new-dice '[(0 …Run Code Online (Sandbox Code Playgroud) 我是一名设计项目的计算机科学专业的学生,我开始想知道什么是好的例子或软件,甚至是硬件,它们在为普通用户提供功能丰富且具有良好可用功能以及对新用户过于恐吓之间起到了重要作用.也有人可以推荐任何好的技巧/书籍来设计功能丰富但不"臃肿"的优质应用程序吗?
我正在尝试决定是否使用James(http://james.apache.org/)或Javamail(http://java.sun.com/products/javamail/)来构建一个接收和处理电子邮件的电子邮件系统.它将发送和接收电子邮件以及处理内容,检查垃圾邮件等.每个的优点/缺点是什么,你建议我应该使用哪些.它必须与Java或Clojure兼容.
请随意为我未在此处提及的Java/Clojure兼容的电子邮件系统提供案例.
我正在通过尝试使用d3.js从JSON结构中绘制一些网格来学习Clojurescript的工作原理.我正在使用笔画来访问d3.
JSON看起来像这样:
[[{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}},
  {"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}}],
 [{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}},
  {"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}}],
 [{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}},
  {"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}}],
 [{"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}}, 
  {"players":{"0":{"rep":0},"1":{"rep":0}}},{"players":{"0":{"rep":0},"1":{"rep":0}}}]]
Run Code Online (Sandbox Code Playgroud)
它代表一个4乘4的网格.我正在尝试向单元格添加值,例如高度,宽度,x和y坐标,这样就可以将数据传递给d3进行绘制.
例如,它看起来像这样:
[[{"width":32,"height":32,"x":0,"y":0,"value":{"players":{"0":{"rep":0},"1":{"rep":0}}}},
  {"width":32,"height":32,"x":32,"y":0,"value":{"players":{"0":{"rep":0},"1":{"rep":0}}}},...
Run Code Online (Sandbox Code Playgroud)
通常我会使用转换函数映射结构,以将单元格从当前值转换为新形式,但这种方法似乎不起作用.我试过map-indexed: (map-indexed #(doto %2 (aset "width" %1)) row)但这似乎没有正确转换值.我很可能错误地访问或设置了值.
代码的当前迭代如下所示:
(defn board->grid [grid-width grid-height board square]
  (let [x-length (count board)
        y-length (count (first board))
        same (min (/ grid-width x-length) (/ grid-height y-length))
        grid-item-width (if square same (/ grid-width x-length))
        grid-item-height (if square same (/ grid-height y-length))
        start-x (/ grid-item-width 2)
        start-y (/ grid-item-height 2)
        values (array)
        grid (array)
        data (js->clj board :keywordize-keys true)] …Run Code Online (Sandbox Code Playgroud) 有没有办法在参数的矢量(或列表)列表中映射3个参数的函数foo,以便向量解构?
(defn foo [a b c]
 ...)
([a1 b1 c1] [a2 b2 c2])
Run Code Online (Sandbox Code Playgroud)
有一个简单的功能,我可以用它来做到这一点?或者我必须构建一个匿名函数?