Clojure:你能将Concat与其他非常复杂的函数一起使用吗?
当我输入:(conact_函数(和假真)’(和真假)) 返回:untitled1.core/conact-function(core.clj:26)处的执行错误(IllegalArgumentException)。 不知道如何从java.lang.Boolean创建ISeq 具体版本:(正确无误) 我做了一点调试,发现问题出在我尝试conact(并简化我的表达式)时。simplify的工作原理与直接调用时的工作原理完全相同,但由于某种原因,它不喜欢conactClojure:你能将Concat与其他非常复杂的函数一起使用吗?,clojure,evaluation,Clojure,Evaluation,当我输入:(conact_函数(和假真)’(和真假)) 返回:untitled1.core/conact-function(core.clj:26)处的执行错误(IllegalArgumentException)。 不知道如何从java.lang.Boolean创建ISeq 具体版本:(正确无误) 我做了一点调试,发现问题出在我尝试conact(并简化我的表达式)时。simplify的工作原理与直接调用时的工作原理完全相同,但由于某种原因,它不喜欢conact (我实际上不需要打印它,我只需要返
(我实际上不需要打印它,我只需要返回它进行进一步操作。但我打印它是为了可视化)
concat
函数处理集合,函数和simplify
只返回bool。要解决此问题,可以将整个cond子句放在向量或列表中,或将每个cond子句的返回放在向量中
使用以下修复程序:
(定义并简化
例如,函数接受:(和simplify'(和true-false))并对其求值->false。
如果直接从REPL调用此函数,则此函数可以正常工作。”
[最后]
[(秒)
(一些错误?最后一个)错误
(每一个?真的?(最后休息)真的
(=1(计数(筛选器不为真(剩余最后一个)))(让[xyz(筛选器不为真(剩余最后一个))]xyz)
:else(让[xxx(最后一个过滤器不为真)]xxx)
)])
将返回预期结果:
具体版本:(and true-true-false)
(some-false?last)false
和(every?true?(rest-last))true
应该是(some-false?last)[false]
和(every?true?(rest-last))[true]
有趣。1.)如果直接调用并简化,它为什么工作,但不是在浓缩的时候?2.)只是好奇,项目不需要,但如果直接调用,是否有方法返回true而不是[true]或false而不是[false]?3.)如果我特别遇到这样的问题,你会建议如何解决?
(ns untitled1.core
(:require [clojure.string :as str]))
(defn nottrue ;helper function for below function
[inp]
(not (true? inp))
)
(defn and-simplify
"function that, for example, takes: (and-simplify '(and true false)) and evaluates it -> false.
This function works perfectly if called directly from REPL."
[last]
(cond
(some false? last) false
(every? true? (rest last)) true
(= 1 (count (filter nottrue (rest last)))) (let [xyz (filter nottrue (rest last))] xyz)
:else (let [xxx (filter nottrue last)] xxx)
) )
(defn concact_function
"When the user types: (concact_function '(and false true) '(and true true true false)). It should
return -> Concacted Version: (and true true true false)"
[my_expression original]
(println "Concacted Version: " (concat (drop-last original) (and-simplify my_expression)))
)