Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure:运行时的函数组合 问题:_Clojure_Function Composition - Fatal编程技术网

Clojure:运行时的函数组合 问题:

Clojure:运行时的函数组合 问题:,clojure,function-composition,Clojure,Function Composition,假设我有一组函数f_1。。。我希望在运行时编写的函数,例如: (f_a (f_b (f_c) (f_d)) (f_e)) 因此,我需要每个函数的参数类型和返回值,以便知道哪些函数可以相互插入 第一次尝试:注释每个函数 我不喜欢这种方法,因为有明显的原因,比如如果我想使用clojure.core作为函数集,我必须对每个函数进行注释,这不是很理想 问题 你将如何尝试解决这个问题 你能帮我吗 我在编写传递给solr的搜索查询时也做了类似的事情,并使用一个映射作为所有函数的参数,让它们返回一个映射,其

假设我有一组函数f_1。。。我希望在运行时编写的函数,例如:

(f_a (f_b (f_c) (f_d)) (f_e))
因此,我需要每个函数的参数类型和返回值,以便知道哪些函数可以相互插入

第一次尝试:注释每个函数 我不喜欢这种方法,因为有明显的原因,比如如果我想使用clojure.core作为函数集,我必须对每个函数进行注释,这不是很理想

问题
  • 你将如何尝试解决这个问题

  • 你能帮我吗


  • 我在编写传递给solr的搜索查询时也做了类似的事情,并使用一个映射作为所有函数的参数,让它们返回一个映射,其中包含函数决定在映射中进行的任何更改,其他所有内容都返回不变。简言之,我想:

  • 为每个函数的输入和输出使用映射
  • core.typed没有帮助,因为一切都是映射
  • schema非常有用,因为您可以使用它了解需要哪些键,并编写验证这些映射结构的测试 在这种情况下,更倾向于静态类型函数式语言的项目/人员可能会转向monad,因为它们是以类型安全的方式描述组合的强大工具

    (defn foo [n f]
      ^{:params [Number clojure.lang.Fn]
        :return String}
      (do stuff with f and n, return a string))