Если вы действительно не имеете ни малейшего представления о названии функции, но знаете, каким должен быть ввод и вывод, вы можете попробовать https://github.com/Raynes/findfn.
(find-arg [-1 6 27] map '% [- + *] [1 2 3] [1 2 3] [1 2 3])
;=> (clojure.core/trampoline)
Это говорит нам о том, что
(map trampoline [- + *] [1 2 3] [1 2 3] [1 2 3])
;=> (-1 6 27)
На самом деле, вы можете злоупотреблять батутом как funcall в clojure.Но это вряд ли идиоматично, потому что это Лисп-1.Приведенный выше код оценивается как:
[(trampoline - 1 1 1), (trampoline + 2 2 2), (trampoline * 3 3 3)]
, который затем становится [-1 6 27]
(точнее в форме a lazyseq).
Как указывает Адриан Муат в комментарии ниже, этовероятно, не самый предпочтительный способ ее решения.Использование funcall-подобной конструкции пахнет немного забавно.Должно быть более чистое решение.Пока вы не найдете это, findfn
может быть полезным ;-).