2016-09-20 68 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

有趣....當我粘貼他的代碼時,我得到了他所做的同樣的錯誤,增加了空間,它就消失了,我還沒有嘗試過診斷。 –

相關問題