Nano Hash - криптовалюты, майнинг, программирование

есть ли способ написать функцию clojure, которая деструктурирует карту и возвращает любую часть карты?

Я хотел бы написать функцию, которая принимает определенную структуру карты и возвращает (распечатывает) любую часть карты, которую я хочу. Это возможно?

Я пока не добился успеха. Ниже приведены функции, которые я написал для печати частей a, b и c карты, но мне кажется, что во всем этом отсутствует какая-то логика.

Тестовая карта {:nums {:номер теста?}}. Моя истинная цель — вернуть тестовое значение, т. е. число? или какое значение пользователь хочет проверить, например, символ? или вектор? Вот почему я решил использовать этот метод.

Я хочу понять логику, поэтому я решил вернуть все части карты, т.е. a, b, c.

Спасибо.

(defn des [mapp]
  (let [[a [b c]] [mapp]]
    (println (str a)))
  )
=> #'user/des
(des {:nums {:test number?}})
{:nums {:test #object[clojure.core$number_QMARK_ 0x1089d00e "clojure.core$number_QMARK_@1089d00e"]}}
=> nil


(defn des [mapp]
  (let [[a [b c]] [mapp]]
    (println (str b)))
  )
=> #'user/des
(des {:nums {:test number?}})

=> nil



(defn des [mapp]
  (let [[a [b c]] [mapp]]
    (println (str c)))
  )
=> #'user/des
(des {:nums {:test number?}})

=> nil
16.02.2020

  • Какова ваша конечная цель здесь? Получить :test, когда :nums пройден? Я думаю, что вам лучше всего использовать get-in, или вы можете деструктурировать так: (let [{{test :test} :nums} {:nums {:test number?}}] test) Было бы действительно полезно, если бы вы могли более четко определить, какова ваша конечная цель (держу пари, что это не печатает что-то) 17.02.2020
  • привет @cfrick, спасибо за ответ. Моя цель - просто вернуть то, что пользователь хочет проверить, т.е. число?, символ? вектор? и т. д. Я не хочу его предварительно кодировать, я хочу, чтобы он был предоставлен пользователем. 17.02.2020
  • Но как ваш код узнает, чего хочет пользователь? Либо это какой-то путь к тесту пользователя и вашего общего кода, либо ваш код должен найти карту с ключом :test; и если да, то до какой глубины? 17.02.2020
  • да, код должен найти значение для тестового значения и вернуть его. Карта всегда будет иметь форму {:nums {:номер теста?}}, но тестовое значение может измениться на то, что хочет пользователь, например, на символ?. 17.02.2020
  • Похоже, вы хотите (get-in mapp [:nums :test]), как предложил @cfrick. 17.02.2020
  • Вы используете последовательную деструктуризацию вместо того, чтобы использовать ассоциативное деструктурирование, как ваш собственный ответ показывает. 20.02.2020

Ответы:


1

Согласно комментариям, проблема заключается в том, чтобы найти любой ключ :test на карте карт. Итак, some+vals можно использовать для получения такого результата:

user=> (some :test (vals {:nums {:test number?}}))
#<Fn@45297e7 clojure.core/number_QMARK_>

Это агрессивно, так как предполагает, что :test (как функцию) можно вызывать для каждого значения карты (по крайней мере, до тех пор, пока не будет найден результат).

16.02.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..