• Как последовательно вычесть два списка в Clojure?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Функция map - https://clojuredocs.org/clojure.core/map
    (map - ;; указываем функцию
         [1 2 3] ;; список один
         [3 2 1] ;; список два
    )
    ;; => (-2 0 2)\
    ;; или
    (map (fn [x y] (- x y))
         [1 2 3]
         [3 2 1])
    Ответ написан
    Комментировать
  • Как последовательно вычесть два списка в Clojure?

    Real_Fermer
    @Real_Fermer
    Программист PHP
    Можно использовать функцию map и операцию вычитания:
    (defn subtract-lists [lst1 lst2] (map - lst1 lst2)) (subtract-lists '(1 2 3) '(4 5 6)) ; => (-3 -3 -3)

    Если нужно получить список, а не последовательность, можно обернуть результат в list:
    (defn subtract-lists [lst1 lst2] (list (map - lst1 lst2))) (subtract-lists '(1 2 3) '(4 5 6)) ; => ((-3 -3 -3))
    Ответ написан
    Комментировать
  • Как работают case и cond в Clojure?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    1) cond - проверяет условия на true/false, на первом true выполняет вторую половину и заканчивается, :else - если ничего не подошло
    2) case - проверяет первый параметр (x) на соответсвие условиям и выполняет первое подходящее, возвращая результат. Очень интересна здесь работа сравнения x со списком (13 42 100500) или false.
    Но пример конечно с издевкой :) Можно было бы все в cond обернуть, и не мучить разум...
    Хотя, взял себе на заметку, понравилось.

    В общем, сам cond отвечает за три сущности (< x) - "Negative", case - проверка на список "Special" и все остальное "Boring"
    Ответ написан
    Комментировать