Я думаю , проблема Python является большой.
Это не об изучении Python (синтаксис), но представляет Вас маленькие и забавные загадки. Решение загадок основано на Python, но можно использовать любые соответствия (калькулятор, сценарии удара, Perl...). После решения один Вы добираетесь, чтобы видеть, как другие решили его и могут обсудить профессионалов & недостатки различных путей.
Очень хороший для получения ощущения того, как вещи могли быть сделаны ( умный ) в Python. Этот сайт работает особенно хорошо, если Вы знаете немного о других языках сценариев или командной строке, и т.д.
(defn gen-fn
[n as b]
(let [n (symbol n)
as (vec (map symbol as))
fn-value (eval `(fn ~n ~as ~b))]
(intern *ns* n fn-value)))
И кое-что используют:
user=> (gen-fn "foo" ["x"] '(do (println x) (println (inc x))))
#'user/foo
user=> (foo 5)
5
6
nil
Однако мне этот подход не очень нравится. Очень плохо пахнет: eval
. Почему вы хотите создавать глобальные объекты во время выполнения? Я вижу различные проблемы с неправильными пространствами имен и прочую уродливую икоту, поднимающуюся на горизонте ...
Я не совсем уверен, но считаю, что вы могли бы сделать это с помощью макроса, который был бы лучше eval.
(defmacro gen-fn
[n as b]
(let [n (symbol n)
as (vec (map symbol as))]
`(intern *ns* n (fn ~n ~as ~@b))))