gpt4 book ai didi

clojure - 在 Clojure 中从两点创建线段

转载 作者:行者123 更新时间:2023-12-02 14:20:41 25 4
gpt4 key购买 nike

执行此操作的最佳方法是什么?这是我到目前为止所得到的

(defn line-segment [start end]
(let [x-direction (abs (- (first end) (first start)))
y-direction (abs (- (last end) (last start)))]
(cond
(= 0 x-direction) (something ...)
(= 0 y-direction) (something ...))))

这是我的最终目标

user=> (line-segment [5 6] [5 8])
([5 6] [5 7] [5 8])

是的,没有对角线,只有 x 或 y 移动。

谢谢。

最佳答案

我认为这是一个非常优雅的解决方案:

(defn line-segment [start end]
(let [x1 (first start) x2 (first end)
y1 (last start) y2 (last end)
dx (if (> x1 x2) -1 1)
dy (if (> y1 y2) -1 1)]
(for [x (range x1 (+ dx x2) dx)
y (range y1 (+ dy y2) dy)]
[x y])))

REPL session :

user> (line-segment [5 6] [5 8])
([5 6] [5 7] [5 8])
user> (line-segment [5 8] [5 6])
([5 8] [5 7] [5 6])
user> (line-segment [-2 7] [1 7])
([-2 7] [-1 7] [0 7] [1 7])
user> (line-segment [1 7] [-2 7])
([1 7] [0 7] [-1 7] [-2 7])

即使您的示例输出被格式化为向量,此函数也会返回一个 LazySeq。我认为这并不重要。

关于clojure - 在 Clojure 中从两点创建线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5454183/

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