Можно ли применить две функции к списку в Clojure? - PullRequest
0 голосов
/ 21 октября 2019

Я хотел вызвать функцию, которую написал, а также добавить элементы в хэш-карту. Я хотел знать, как можно применить обе эти функции к одному и тому же списку.

Например, у меня есть следующий код для рекурсивного кода DFS

(defn dfs-recur [maze curr-loc goal-loc parent]
  (;;Want to add elements of the following list to the parent map 
   ;; and call dfs-recur on them
    (def unvisited (filter #(not (contains? parent %)) (get-neighbors maze curr-loc)))
    maze)

Если бы я должен был его реализоватьв питоне это будет выглядеть примерно так. Проблема в том, что я не понимаю, как сделать все 4 вещи внутри цикла for в Clojure

def dfs-recur(maze, curr-loc, goal-loc, parent):
    neighbors = get-neighbors(maze, curr-loc)
    for i in neighbors:
        if i in parent:
            break;
        parent[i] = curr-loc
        if i == goal-loc:
            break;
        parent = dfs-recur(maze, i, goal-loc, parent)
    return parent

Ответы [ 3 ]

0 голосов
/ 21 октября 2019

Вы ищете что-то вроде

(into {} (for [x your-list] [x (val-func x)])

=> (into {} (for [x [1 2 3]] [x (str x)]))
{1 "1", 2 "2", 3 "3"}

Или что-то с функцией также для клавиши:

=> (into {} (for [x [1 2 3]] [(str x) (* x x)]))
{"1" 1, "2" 4, "3" 9}
0 голосов
/ 23 октября 2019

Используя when, вы можете выполнить несколько действий без возврата.

Например

(when condition
    (assoc {} key value)
    (recursive-func arg1 arg2)
)

0 голосов
/ 21 октября 2019

Что-то вроде:

(assoc {} your-key (your-func your-list))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...