Есть ли способ написать функцию clojure, которая разрушает карту и возвращает любую часть карты? - PullRequest
0 голосов
/ 17 февраля 2020

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

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

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

I wi sh, чтобы понять логи c, поэтому я решил вернуть все части карты, т.е. а, б, 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

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

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

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

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

0 голосов
/ 18 февраля 2020
(defn des [mapp] 
  (let [m mapp
          {x :nums y :vects z :syms} m
          {a :test} x
          {b :test} y
          {c :test} z
          ]
    (println x)
    (println y)
    (println z)
    (println a)
    (println b)
    (println c)
    )
  )
=> #'user/des

(des {:nums {:test number?}})
{:test #object[clojure.core$number_QMARK_ 0x48c86e76 clojure.core$number_QMARK_@48c86e76]}
nil
nil
#object[clojure.core$number_QMARK_ 0x48c86e76 clojure.core$number_QMARK_@48c86e76]
nil
nil
=> nil

(des {:nums {:test number?}, :vects {:test vector?} :syms {:test symbol?}})
{:test #object[clojure.core$number_QMARK_ 0x48c86e76 clojure.core$number_QMARK_@48c86e76]}
{:test #object[clojure.core$vector_QMARK___5399 0x17d504aa clojure.core$vector_QMARK___5399@17d504aa]}
{:test #object[clojure.core$symbol_QMARK_ 0x4593ff34 clojure.core$symbol_QMARK_@4593ff34]}
#object[clojure.core$number_QMARK_ 0x48c86e76 clojure.core$number_QMARK_@48c86e76]
#object[clojure.core$vector_QMARK___5399 0x17d504aa clojure.core$vector_QMARK___5399@17d504aa]
#object[clojure.core$symbol_QMARK_ 0x4593ff34 clojure.core$symbol_QMARK_@4593ff34]
=> nil
...