我想找到一个范围内两个数字之间的差异,但我需要能够环绕到范围的开头,就像一个循环列表。
范围是 9。
因此,如果数字是 6 并且猜测是 5,则答案应该是 1,但是如果数字是 8 并且猜测是 2,那么答案应该是 3。
我的第一个想法是像这样将数字增加 10:
n is the correct number, g is the guess, r is the result.
( let
[ r (min (- (+ n 10) g) (- g n)) ]
(if (> 0 r) ( * -1 r ) r) )
)
...这对环绕有用,但问题是数字 10 的存在将结果增加 1,如果它环绕。仅从结果中减去 1 或数字在所有情况下都不起作用。
根据所讨论的数字,结果是否定的,因此 if 语句将其交换为正值。
这不是一个 clojure 问题,它实际上是一个数学问题,我会在任何语言中遇到这个问题,但碰巧这就是我正在写的。我才刚刚开始使用 clojure(或任何功能语言),所以我完全有可能做错事或非常不习惯。
谢谢你的帮助