给定Clojure表达式中的任意形式,我想设计一个函数,该函数返回随机选择的相同类型签名的形式。
该函数,我将其命名为rand-form-sub,其行为如下:
(rand-form-sub 2) => 8
(rand-form-sub 'or) => and
;; both and and or obey the same haskellian type signature:
;; f :: a -> a -> bool, where as are comparable for equality
(rand-form-sub '+) => - ;; both + and - obey f :: int -> int -> int
我怀疑解决方案涉及1)将函数的范围限制为Clojure的子集(例如,标准lib)2)最高级别的cond结构3)表示语义上有效替换的数组映射。
最后,我知道Clojure缺少类型签名可能存在限制,但我愿意妥协以找到最佳方法。
如果Clojure没有类型签名,我怎样才能找到任意Clojure表单的等效类型签名的形式?
注意:请随意编辑以纠正我帖子中任何滥用行话的行为:我不确定我是否正确使用术语表格。