是否有任何方法存储在前提条件下执行的计算结果,以便可以在实际的函数体中使用。
这很可怕(代价高昂--计算运行两次):
(defn bar [x]                                                                           
  {:pre [(> (costly-computation x) 1337)]}                                                
  (costly-computation x))我想做些这方面的事情。但这不管用。
(defn smartbar [x]
  (let [res (costly-computation x)]                                                       
    {:pre [(> res 1337)]}
    res))发布于 2013-12-09 10:45:44
你有多种方法来解决这个问题。例如,您可以在(bar)函数之外计算(昂贵的-计算x),并将其作为参数传递给(bar)函数。
或者,您可以在(bar)函数中计算(昂贵的-计算x)并在那里验证,没有{:pre}条件。
或者写一个宏来做你想做的事!
您的smartbar无法工作,因为创建defn宏并不是为了这样做的。
在REPL中尝试如下:
(source defn)https://stackoverflow.com/questions/20468484
复制相似问题