标签: clojurescript

将clojure函数评估为引用形式

我正在使用一个带参数的函数,如下所示: (test-function '((gate 1) (gate 3) (gate 2)))

列表参数可以包含任意数量的元素,其中每个元素的形式为(gate x)其中x可以是从0到8我有一个功能,整数generate-gate-list,其生成随机列表的长度(高达10)和内容,尽管它们总是上面的形式.

:生成栅极列表的示例输出((gate 2)),(()),((gate 1) (gate 6))等.

我希望能够嵌套generate-gate-list在内部,test-function以便我可以测试一堆随机生成的列表,而不事先生成它们.换句话说,我想要这样的东西:(test-function '(generate-gate-list))除了已经评估了generate-gate-list之外.我已经尝试了某种宏语法 - 引用和取消引用,但这会导致已解决的变量,比如(user/gate 3)哪些搞砸了测试功能.这是我的生成门列表代码:

(defn generate-gate-list []
  (map symbol (repeatedly (rand-int 10) #(random-gate))))
Run Code Online (Sandbox Code Playgroud)

random-gate输出门元素作为字符串,即"(gate 3)""(gate 2)".

所以简而言之,我希望(test-function (something-here (generate-gate-list)))或者(test-function (modified-generate-gate-list))相当于(test-function '((gate 1) (gate 4) (gate 2)))或者生成门列表的其他任意输出.谢谢!

macros list clojure clojurescript

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

评估Clojure中的函数列表

我有一个没有副作用的函数列表并采用相同的参数.我需要评估列表中的每个函数,并将结果放入另一个列表中.Clojure中有一个功能吗?

functional-programming clojure clojurescript

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

在clojurescript中返回一个唯一的通道

目标:构造一个ClojureScript函数,该函数接受一个字符串s并返回带有名称的唯一通道(str s "-chan")(如果该通道不存在,则创建它).这是我的尝试:

(defn string-channel 
  [s]
  (let [chan-name (symbol (str s "-chan"))]
    (defonce chan-name (chan))
    chan-name))
Run Code Online (Sandbox Code Playgroud)

这会产生错误.我如何实现这一目标?请注意,由于我在ClojureScript中,eval如果解决方案涉及宏,我无法使用该构造.

clojure clojurescript

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

代码不是从go块调用的,但是它可以在REPL中运行

我有更新DOM的代码.new-recipe!调用API来获取新的配方字符串.update-recipe-state接下来在屏幕中更新此状态.最后我们打电话给update-transition-buttons.

(defn- add-listener-to-recipe-button! []
  "Listens to go button, creates a new recipe and displays it"
  (create-click-event-listener! (dommy/sel1 :#button-start)
                                #(go (new-recipe!)
                                     (<! (timeout 2000))
                                     (update-recipe-state!)
                                     (<! (timeout 2000))
                                     (update-transition-buttons! "onboarding"))))

;; define your app data so that it doesn't get over-written on reload
(defonce world
  (add-listener-to-recipe-button!))
Run Code Online (Sandbox Code Playgroud)

update-transition-buttons有步骤(利用超时代码之间的一些延迟在这里),如下所示:

(defn- update-transition-buttons! [recipe-name]
  "Updates the buttons with the transition names"
  (go
    ;; Split response in list of actions by splitting on the comma
    (let …
Run Code Online (Sandbox Code Playgroud)

clojure goroutine clojurescript core.async figwheel

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

为什么一些?在Clojure中将false作为参数时返回true?

我无法理解一些人的意图在Clojure中的功能.

我需要一些函数(内置),它在需要时返回false(nil或false).

这是一个例子:

(some? "1")
=> true

(some? nil)
=> false

(some? false) ;;Which is odd!!
=> true
Run Code Online (Sandbox Code Playgroud)

lisp functional-programming function clojure clojurescript

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

是否有任何宏(声明除外)用于编写函数而不考虑Clojure中函数声明的顺序

我想编写函数而不考虑函数声明的顺序,我不想使用declare函数,因为我需要声明我不想做的所有函数名.

我想要一些宏或一些能为我带来魔力的功能.长话短说,我需要写像Java函数(方法声明的顺序并不重要)

clojure clojurescript

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

Clojurescript地图功能出乎意料地表现出来

我有两个代码片段,我认为这两个代码片段都会产生警报.但是,第一个结果为none,而第二个执行警报.

(map #(.alert js/window %) ["hey1" "hey2"])
Run Code Online (Sandbox Code Playgroud)

这个轻微的修改按预期打印(零nil),以及修复警报问题.问题是为什么

(print (map #(.alert js/window %) ["hey1" "hey2"]))
Run Code Online (Sandbox Code Playgroud)

另一个奇怪的观察是,第一个代码片段来自浏览器 - repl,但不是在键入代码时.

地图功能副作用是免费的,但打印不是吗?也许我不知道一些核心代码优化?

解决方法和答案都很受欢迎.如果您需要更多信息,请在评论中告诉我.

[org.clojure/clojurescript"1.8.51"]

BOOT_CLOJURE_VERSION = 1.7.0

BOOT_VERSION = 2.5.5

java版"1.8.0_101"

说明:Ubuntu 14.04.4 LTS

printing clojure clojurescript map-function

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

cljs/core.cljs [第988行,第14栏]标签Inf没有读卡器功能

我正在尝试启动最新的稳定版[org.clojure/clojurescript "1.9.946"],使用boot-cljs并收到此错误:cljs/core.cljs [line 988, col 14] No reader function for tag Inf.

我已经了解到1.9.946引入了新的##Inf语法:https://cljs.github.io/api/syntax/Inf.但不知道为什么我收到这个错误.我也试过这样做:[adzerk/boot-cljs "2.1.4" :exclusions [org.clojure/clojurescript]]但它没有改变.

编辑:只是尝试从repo构建cljs版本并连接npm deps lein-npm,服务器渲染的反应按预期工作.可能与boot-cljsdeps或其他我的组件有关.

clojure clojurescript

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

什么是clojure?

在clojure文档中,smap偶尔会使用该术语.例如,核心/替换:

给定替换对和向量/集合的映射,返回带有任何元素的向量/ seq =用smap中的对应val替换的smap中的键.

术语" smap" 是什么意思?

clojure clojurescript

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

Clojure:进入{}不会保留排序顺序

我有一个嵌套的地图,其结构如下(Clojurescript):

{"6841"
 {"primaryTitle" "First name",
  "secondaryTitle" "last name"},
 "7944"
 {"primaryTitle" "Test 2 first name",
  "secondaryTitle" "Test 2 last name"}}
Run Code Online (Sandbox Code Playgroud)

然后,我使用嵌套地图内的键对地图进行排序,如下所示:

(defn compare-title [x y]
  (compare [(get (second x) "primaryTitle") (get (second x) "secondaryTitle")]
           [(get (second y) "primaryTitle") (get (second y) "secondaryTitle")]))

(sort compare-title @loaded-assets)
Run Code Online (Sandbox Code Playgroud)

到目前为止,排序工作正常,但由于排序功能返回的数据结构如下:

    ["6841"
     {"primaryTitle" "First name",
      "secondaryTitle" "last name"}],
    ["7944"
     {"primaryTitle" "Test 2 first name",
      "secondaryTitle" "Test 2 last name"}]}
Run Code Online (Sandbox Code Playgroud)

我必须使用into {}将地图转换回初始结构:

(into {} (sort compare-title my-map))
Run Code Online (Sandbox Code Playgroud)

但这完全颠倒了按排序进行的排序。我尝试替换 into {}为:

  1. flatten (将其转换为列表)
  2. apply hash-map …

sorting clojure clojurescript

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