我对Clojure和函数式编程很陌生,我试图使用两个函数将一些字符连接到一个字符串中。我的想法基本上是这样的:
(defn receive [char-from-list]
(str char-from-list))
(defn send-char [list-char]
(if (empty? list-char)
(receive nil)
((receive (first list-char))(send-char (rest list-char)))))
因此,我的想法是从函数send开始,并作为参数编写一个字符列表,如下所示:
(send-char '(\h \e \l \l \o))
带有get sent的receive函数一次发送一个字符,并使用str将它们添加到一起,我的最终输出是:“hello”。
当我尝试运行代码时,会出现以下错误:automata处的执行错误(ClassCastException)。核心/发送字符(核心clj:44)。类java。无法将lang.字符串转换为clojure类。lang.IFn(java.lang.String位于加载器“bootstrap”的模块java.base中;clojure.lang.IFn位于加载器“app”的未命名模块中)
我不确定是否有办法做到这一点或其他方法,但我不知道如何,请帮助。谢谢
错误是因为此处一行中有两个左括号:
((receive ...
请记住,在Clojure中,左paren表示“函数调用”,字符串不是函数(函数接收
返回字符串)。
如果您有2件事要在Clojure中分组,则需要使用do
表单,例如:
(defn send-char [chars]
(if (empty? chars)
(receive nil)
(do
(receive (first chars))
(send-char (rest chars)))))
在确定了错误的来源之后,您最初的问题仍然非常模糊和未定义。以下是将字符序列连接到字符串的3种方法:
(ns tst.demo.core
(:use tupelo.core tupelo.test)
(:require
[clojure.string :as str]))
(dotest
(let-spy [chars (vec "hello")
s0 (apply str chars)
s1 (str/join chars)
s2 (reduce str "" chars)
]
(is= chars [\h \e \l \l \o])
(is= s0 "hello")
(is= s1 "hello")
(is= s2 "hello")
))
以上内容基于我最喜欢的模板项目。一定要研究文档来源列表。
我可能是错的,但是在rethinkdb驱动程序中,lambda不知怎么地被编译成ast语法,这些语法被转换成js并发送到数据库。我相信我需要以某种方式显式地创建一个lambda。http://www.retinkdb.com/blog/lambda-functions/那么这个问题是如何在Clojure中将lambda实现为一个名为“lambda”的函数的呢?只显示如何使用函数,而不是lambda
我正试图从包含1768张图片的列表中创建numpy数组。这是我的代码: 当运行它时,我面临这个错误: 有人能帮我解决吗?
问题内容: 我一直在寻找这个问题的准确答案已有几天了,但是还没有任何好的结果。我不是编程的完整初学者,但即使在中级水平上也还不是。 当我进入Python的外壳程序时,键入:并且可以看到当前作用域(主块)中所有对象的所有名称,其中有6个: 然后,例如,当我声明一个变量时,它会自动添加到内置模块下的对象列表中,当我再次键入时,它现在显示: 函数,类等也是如此。 我如何删除所有这些新对象而不删除开始时可
问题内容: 我不太明白为什么我不能将Int []从一个函数传递到另一个函数: 这给了我以下错误: 谢谢你的帮助! 问题答案: 中的参数称为 可变参数 。这意味着您可以传入该参数类型的可变数量,并且传入的所有内容都将转换为该类型的数组,以供您在函数中使用。 因此,内部的参数是一个数组,而不是所期望的一组参数。 您可能想要像这样重载以接受其中任何一个,因此您的平均函数可以调用适当的版本:
创建一个作为给定单位的给定数量是很简单的: 但是对于没有这样的方法。最好的方法是什么? 我的情况是,我有一个单位和一个计数作为变量,所以不能简单地硬编码对Period::ofYear或类似的调用。 这是我想到的最干净的东西: 这是干净的,因为它避免了嵌入关于一个时期可以有什么单位的知识,尽管这可能过于纯粹。不过,对于这样一个简单的操作来说,它似乎太冗长了!
我试图在Kotlin中使用公共接口函数(正如我在Java中学习的那样)。 为此我创建了我的方法 据我记忆所及,我应该能做 但这似乎是不可能的(尽管可以使用modifier1.apply{input}) 阅读更多关于它的信息,我发现: Kotlin:如何将一个函数作为参数传递给另一个? 所以我把我的方法签名改为: 在这里我可以做 我可以这样叫福 哪里 到目前为止,这似乎是可能的,但将函数引用设为nu