需要帮助使用函数从地图转换数据
(defn transform-map-1 [past-step dir]
(cond (= dir "v")
(list (first (first past-step))
(+ -1 (first (first past-step))))
(= dir "^")
(list (first (first past-step))
(+ 1 (first (first past-step))))
(= dir ">")
(list (+ 1 (first (first past-step)))
(first (first past-step)))
(= dir "<")
(list (+ -1 (first (first past-step)))
(first (first past-step)))))
此函数采用 x,y 格式的两个输入坐标作为过去的步骤,并使用上下左右的 dir 来给出更新坐标
我想做的有一系列方向,并为每个目录返回更新的坐标
输入刺“^>v<" , output should be ((0,1) (1,1) (1,0) (0,0)
我们从坐标 (0.0) 开始,第一个转换的输出成为第二个字符的输入
我能得到的最好的结果是,但它给了我一个错误
(map (transform-map-1 ['(0, 0)] %1)(char-array string-test))
您已接近实施。
我看到的问题是:
调用
%1
中的 transform-map-1
仅在使用以下格式的 匿名函数 中有效:#( ... use %1 %2 %3 etc inside)
您的函数期望方向是字符串,但映射字符串将导致对字符序列进行迭代,这不是您的函数所期望的。一个技巧是将单个字符串转换为多个 1 字符字符串是
(map str your-string)
,它使用 str
将 Char
转换为 String
。
通过这两项更改,对函数的调用将如下所示:
(def test-string "^>v<")
(map #(transform-map-1 ['(0, 0)] %1) (map str test-string))
;; returns: ((0 1) (1 0) (0 -1) (-1 0))
您稍后可以学习其他一些可以帮助您解决难题的东西:
[x y]