2016-09-20 71 views
0

我正在为一个赋值编写一个基本的指数函数,并且我无法弄清楚为什么我得到这个错误。这是我的代码:java.lang.Double不能转换为clojure.lang.IFn问题

(def epsilon 0.000001) 

(def exponentialing 
    (fn [F S T x] 
    (if 
     (<= T epsilon) 
     S 
     (recur (+ F 1) (+ S T) (* T(/ x F)) x)))) 


(def exp 
    (fn [x] 
    (exponentialing 1.0 0.0 1.0 x))) 

我得到的最后一行的错误消息,我假设它在参数现场

+1

我只需复制/粘贴您的代码,一切按原样运行。 '(exp 5)'和'(exp(java.lang.Double。5.0))'返回适当的148.41315852164777, 1.8.0和1.9.0-alpha12。 –

+0

向我们展示了如何调用'exp'。 –

回答

0

双打或X它看起来像你这样做在recur行中缺少空格字符。我还将您的功能从def简化为defn。此外,您未能在您的原始版本中呼叫exp

(ns clj.core 
    (:require [tupelo.core :as t])) 
(t/refer-tupelo) 

(def epsilon 0.000001) 

(defn exponentialing 
    [F S T x] 
    (if 
    (<= T epsilon) 
    S 
    (recur (+ F 1) (+ S T) (* T (/ x F)) x))) 

(defn exp 
    [x] 
    (exponentialing 1.0 0.0 1.0 x)) 

(spyx (exp 3)) 

> lein run 
(exp 3) => 20.085536488379084 
+0

'T'和'('之间的空格与它无关。我粘贴了他的代码,并且它的工作正常。 –

+0

有趣....当我粘贴他的代码时,我得到了他所做的同样的错误,增加了空间,它就消失了,我还没有尝试过诊断。 –

相关问题