gpt4 book ai didi

clojure - 简化函数输出不完全符合预期

转载 作者:行者123 更新时间:2023-12-02 02:50:16 24 4
gpt4 key购买 nike

我正在尝试编写一个函数来简化任意 bool 表达式列表,但我的函数未通过某些测试。

  (defn sim
[expression]
(if (some true? expression)
true
(if (= (count expression) 2)
(if (some false? expression)
false
(if (map simple-symbol? expression)
(if (= (count expression) 2)
(drop 1 expression)
expression)))
(if (some simple-symbol? (drop 1 expression))
(filter simple-symbol? expression)))))

当我使用 (sim '(or x false)) 调用时,我希望输出为 (x),但它返回 (or x )。相反,当我使用 (sim '(or x)) 调用时,我的输出是预期的 (x)

最佳答案

按照这些思路怎么样?这仅适用于 or,但我相信我们可以为 and 和其他 bool 运算符做同样的事情。

(defn simplify-or [exp]
(let [op (first exp)
args (rest exp)]
(when (= op 'or)
(let [nf-args (filter #(symbol? %) args)]
(if (some true? args)
true
(case (count nf-args)
0 false
1 (first nf-args)
(concat (list op) nf-args)))))))

结果:

(simplify-or '(or false))       
=> false

(simplify-or '(or true))
=> true

(simplify-or '(or x true y false))
=> true

(simplify-or '(or x y false))
=> (or x y)

关于clojure - 简化函数输出不完全符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52528267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com