【发布时间】:2016-12-13 17:29:32
【问题描述】:
我编写了以下函数来查找 5 个变量中是否只有一个为真:
(define (oneof v w x y z)
(or (and v (not w) (not x) (not y) (not z))
(and w (not v) (not x) (not y) (not z))
(and x (not v) (not w) (not y) (not z))
(and y (not v) (not w) (not x) (not z))
(and z (not v) (not w) (not x) (not y)) ))
(xor 只接受 2 个参数)
但是,它是非常必要的,并且没有功能。此外,我想编写一个函数(oneof N),它是通用的,而不是特定于 5 个变量。如何才能做到这一点?谢谢。
编辑:正如 cmets 中所指出的,代码是“重复的”而不是“必要的”,尽管仍然需要对其进行改进。
【问题讨论】:
-
对于它的价值,你发布的代码没有什么是非常必要的(没有副作用,一切都是引用透明的),它只是非常重复.
-
我想要一个循环而不是重复。也使它更通用,而不是仅用于 5 个变量。
-
是的,我同意对您发布的代码进行了改进 — 也应避免不必要的重复代码 — 但我只是指出您认为您的代码是命令式的观察并不真正准确. Imperative 不是 bad 的同义词,就像函数式程序员有时会让你相信的那样。 ;)
-
我在上面的问题的编辑中添加了这个观察结果。
标签: functional-programming scheme racket xor