Хобрук: Ваш путь к мастерству в программировании

Clojure меняет местами элементы во входной последовательности

Как поменять местами соседние элементы во входной последовательности с помощью clojure. [10 15 20 25] ---> [15 10 25 20] [:q :e :g :t :p] ---> [:e :q :t :g :p]

вот как я это сделал, но уверен, что есть лучшие способы сделать это!

(defn switch [s]
(loop [[a b & rest] s
       result []]
  (if (empty? rest)
    (cond
        ;;empty sequence
        (empty? s) result
        ;;odd sequence
        (nil? b) (conj result a)
        ;;even sequence
        :else (conj result b a)
    )
    (recur rest (conj result b a))))
    )
27.11.2018

  • Я голосую за то, чтобы закрыть этот вопрос как не относящийся к теме, потому что: похоже, это простая домашняя задача. 27.11.2018
  • Покажите работу, которую вы сделали до сих пор. 27.11.2018
  • @AlanThompson Это не официальная политика Stack Overflow в отношении домашних заданий. Нам важны вопросы, которые правильно заданы и не зависят от того, являются ли они домашним заданием. Этот вариант мне подходит, так как он четко определяет желаемое поведение и показывает попытку. Это даже рабочая попытка, спрашивая, как сделать это лучше. 27.11.2018
  • Первая строка была единственным, что присутствовало при первом размещении 27.11.2018

Ответы:


1
  • Верно. Это более лаконично по-вашему. 27.11.2018
  • Не только лаконичнее, но и правильнее. flatten (почти) никогда не бывает правильным ответом. Представьте, если бы A вместо этого было определено как [[1 2] [3 4]]. Мы бы хотели, чтобы результат был [[3 4] [1 2]], но с версией flatten мы получили бы [3 4 1 2]. 27.11.2018
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..