小编0dB*_*0dB的帖子

为什么(每个?字符串?[])产生真实?

查看源代码every?可以明确原因

(every? string? []) => true
Run Code Online (Sandbox Code Playgroud)

这是因为every?以递归方式实现并用于(nil? (seq coll))结束递归.但是,我的问题是,这种行为有何意义?刚刚绊倒了.

我已经解决了我的问题

(and (seq x) (every? string? x))
Run Code Online (Sandbox Code Playgroud)

clojure

12
推荐指数
3
解决办法
284
查看次数

可以尝试捕获不同(但嵌套)的宏?

try是在一个宏时,catch在由第一被叫的第二个.如何让以下工作?

(defmacro catch-me []
  `(catch ~'Exception ~'ex
     true))

(defmacro try-me []
  `(try (+ 4 3)
        (catch-me)))
Run Code Online (Sandbox Code Playgroud)

扩展try-me看起来很好:

(clojure.walk/macroexpand-all '(try-me))
Run Code Online (Sandbox Code Playgroud)

产量

(try (clojure.core/+ 4 3) (catch Exception ex true))
Run Code Online (Sandbox Code Playgroud)

但是打电话(试试我)产量:

"Unable to resolve symbol: catch in this context",
Run Code Online (Sandbox Code Playgroud)

BTW,这也是你在不尝试时使用catch时在REPL中会得到的信息.

更新:

这就是我可以让它工作的原因(感谢@Barmar),在这里您可以看到我的代码的实际上下文:

(defmacro try-me [& body]
  `(try
     ~@body
     ~@(for [[e msg] [[com.mongodb.MongoException$Network "Database unreachable."]
                      [com.mongodb.MongoException "Database problem."]
                      [Exception "Unknown error."]]]
         `(catch ~e ~'ex
            (common/site-layout
             [:div {:id "errormessage"}
              [:p ~msg]
              [:p "Error is: " ~e]
              [:p "Message …
Run Code Online (Sandbox Code Playgroud)

macros clojure try-catch

6
推荐指数
1
解决办法
1128
查看次数

如何更新用`data`而不是`type`定义的PureScript记录?

更新使用type作品定义的记录,如与Haskell的差异中所述

type PointRec = { x :: Number, y :: Number }

setX :: Number -> PointRec -> PointRec 
setX val point = point { x = val }
Run Code Online (Sandbox Code Playgroud)

但是当使用data(并因此指定构造函数)定义时,它不会:

data PointRec = PointRec { x :: Number, y :: Number }

setX :: Number -> PointRec -> PointRec 
setX val point = point { x = val }
Run Code Online (Sandbox Code Playgroud)

我从编译器得到的错误是

Could not match type
Run Code Online (Sandbox Code Playgroud)

和一些细节.

我能在这做什么?

purescript

6
推荐指数
1
解决办法
562
查看次数

PureScript是否支持像C/Java等"格式化字符串"?

我需要输出一个带前导零和六位数的数字.在C或Java中,我将使用"%06d"格式字符串来执行此操作.PureScript是否支持格式字符串?或者我将如何实现这一目标?

purescript

6
推荐指数
1
解决办法
253
查看次数

如何将Clojure中的整数列表传递给Frege函数?

受上一个问题的启发,将整数列表从java传递给frege函数的最简单方法是什么?@Ingo对答案的评论,我试过了

(Foo/myfregefunction (java.util.List. [1,2,3,4]))
Run Code Online (Sandbox Code Playgroud)

但得到(ctor = constructor):

CompilerException java.lang.IllegalArgumentException: No matching ctor found for interface java.util.List
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?至少java.util.List没有产生ClassCastException; 这是否意味着这是正确的轨道?

我可以从Clojure发送几乎任何Java集合类型的Frege,请参阅将Clojure数据结构转换为Java集合.

顺便说一句,使用plain (Foo/myfregefunction [1,2,3,4])而不是yield ClassCastException clojure.lang.PersistentVector cannot be cast to free.runtime.Lazy,@ Ingo指出,"一个clojure列表不是一个frege列表."在转换时类似的响应java.util.ArrayList.

在弗雷格方面,代码就像

module Foo where

myfregefunction :: [Int] -> Int
-- do something with the list here
Run Code Online (Sandbox Code Playgroud)

java clojure frege

4
推荐指数
1
解决办法
371
查看次数

如何在PureScript中读取文件(readFile)

在测试时,我想从磁盘读取和写入文件(JSON in,JSON out).我如何在PureScript中执行此操作?在Haskell我有类似的东西

main :: IO ()
main = do
  input <- readFile "input.json"
  writeFile "output.json" $ process input
Run Code Online (Sandbox Code Playgroud)

我的所有尝试到目前为止都失败了,包括试图使用readFileimport Node.FS.Sync.

顺便说一句,如果我的JSON文件中还有其他(更好)的阅读方式,请告诉我.(我不是JavaScript专家,但我想将一些 - 严格 - Haskell代码移植到JS,以便它可以在其他地方使用.)

purescript

4
推荐指数
2
解决办法
1258
查看次数

为什么Datomic在迭代时连续两次产生相同的临时ID?

这将生成两个不同的ID,这很棒:

#db/id[:db.part/user]
#db/id[:db.part/user]
Run Code Online (Sandbox Code Playgroud)

但是类似下面的内容(我到目前为止尝试过很多想法)会产生两次相同的id,这不是我想要的:

(repeatedly 2 (fn [] #db/id[:db.part/user]))
(for [n [1 2]] #db/id[:db.part/user])
Run Code Online (Sandbox Code Playgroud)

所有产生的东西都像

(#db/id[:db.part/user -1000774] #db/id[:db.part/user -1000774])
Run Code Online (Sandbox Code Playgroud)

每个呼叫产生的号码相同.

我真正想要的是调用NOT根本不生成数字,这样我就可以通过事务添加生成的数据.

有任何想法吗?

为了清楚起见,文档说,"每次调用tempid都会产生一个独特的临时ID."

[在@maxthoursie评论后编辑,无论如何repeat都会遇到这个问题.]

clojure datomic

2
推荐指数
1
解决办法
415
查看次数

标签 统计

clojure ×4

purescript ×3

datomic ×1

frege ×1

java ×1

macros ×1

try-catch ×1