Clojure: Можете ли вы использовать Concat в рамках рекурсивной функции? - PullRequest
0 голосов
/ 08 марта 2020
(defn recurse_fun       ;assume user types in (recurse_fun '(true false true) "")
   [input final]    

 (cond
  (empty? input) (System/exit 0) ;at this point final should equal (false true false)
  )

(cond
  (= 'false (first input)) (recurse_fun (rest input) (concat 'true final))

   ;^ recurse with new parameters of the rest of input and true concated with previous final

  (= 'true (first input)) (recurse_fun (rest input) (concat 'false final))

  ;^ recurse with new parameters of the rest of input and false concated with previous final

 )                

Я хочу, чтобы final равнялось "false true false" при вызове (System / exit 0). Я считаю, что это связано с Конкатом. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 08 марта 2020

пара вопросов здесь:

  • вы должны использовать cons, чтобы поместить элемент в список
  • вам нужно условие остановки для этой рекурсивной функции, используя if в в этом случае
  • лучше использовать recur вместо того же имени функции в теле функции
    (defn recurse_fun       
       [input final]    

     (if (empty? input)  ;an `STOP` condition for recursive call
        final ;final value to be return
        (cond
          (= 'false (first input)) (recur (rest input) (cons 'true final )) ; pls use cons instead of concat
          ; usually in Clojure use `recur `
          (= 'true (first input)) (recur (rest input) (cons 'false final )) ; I guess it is a typo for your ?
         )
    ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...