Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
你能简化一个“问题”吗;“不是表达”;在Clojure?_Clojure - Fatal编程技术网

你能简化一个“问题”吗;“不是表达”;在Clojure?

你能简化一个“问题”吗;“不是表达”;在Clojure?,clojure,Clojure,用户将键入(eval not’(not(和x y)),我希望它返回=>(或(not x)(不是y))。在保持cond使用的同时,这是否可能。希望不要使用宏,谢谢。这是一个关于遵循布尔运算规则进行列表操作的问题。不需要学习宏 您的起点是正确的,但需要了解: 要应用的规则(例如,notover和看起来像(not(和x y))→ (或(非x)(非y)),但也适用于非上方的非、或等 何时应用递归(例如,如果参数是序列,则可以分布not,但非序列结束递归)并小心地再次调用eval not 请记住,函数

用户将键入(eval not’(not(和x y)),我希望它返回=>(或(not x)(不是y))。在保持cond使用的同时,这是否可能。希望不要使用宏,谢谢。

这是一个关于遵循布尔运算规则进行列表操作的问题。不需要学习宏

您的起点是正确的,但需要了解:

  • 要应用的规则(例如,
    not
    over
    看起来像
    (not(和x y))
    → <代码>(或(非x)(非y)),但也适用于
    上方的
  • 何时应用递归(例如,如果参数是序列,则可以分布
    not
    ,但非序列结束递归)并小心地再次调用
    eval not
请记住,函数的返回值将是list,因此需要构建一个列表作为返回值。对于第一种情况,列表需要以符号
开头,因此
条件中第一个测试表达式旁边的返回值如下所示:

(列表)或(eval not(列表非x))(eval not(列表非y)))
…其中
x
y
是输入的实际部分,位于
输入的第二个元素
之后

我建议您检查输入本身是否是序列,这样您就可以开始为这些部分命名,否则代码很快就会变得混乱

根据上述内容,代码开始如下所示:

(定义评估非[输入]
(续)
当这些事情发生时
(和(=”非(第一次输入))
(第二次输入)
(='和(第一(第二输入)))
那么
(设[x(第n次(第二次输入)1]
y(第n次(第二次输入)2)]
;分发“不”在“上面”和“这里”。。。
其他情况。。。
))

我希望这有助于您解决家庭作业。

如果您不使用宏,您认为
输入将得到什么?宏可以做到这一点,但为什么?而且,只有宏可以重新编写代码,这是您的要求)。函数可以接受引用的列表
”(不是(和x y))
并返回引用的列表
”(或(不是x)(不是y))
,我认为这是我想要的。真正的问题是这里没有问题,除了“可能吗?”,没有尝试或研究。我的尝试就是上面写的代码。我想知道如何开始这样做
(defn eval-not

  [input]

 (cond

(and (seq? (second input)) (= 'and (first (second input)))) ;(do x here which -> (or (not x) (not y))
))