Function Clojure中允许在一个函数内调用多个函数?
我试图从城市hashmaps中获取某些值,以实现我的距离函数: 但每次我这样做时,它都会显示不支持的绑定形式:(latreturnrecord1) 以下是我的latReturn和longReturn函数:Function Clojure中允许在一个函数内调用多个函数?,function,clojure,hashmap,call,Function,Clojure,Hashmap,Call,我试图从城市hashmaps中获取某些值,以实现我的距离函数: 但每次我这样做时,它都会显示不支持的绑定形式:(latreturnrecord1) 以下是我的latReturn和longReturn函数: (defn latReturn [line] (def x line) (def y (string/split x #",")) (def my-map { :city (y 0) :lat (y 1) :
(defn latReturn [line]
(def x line)
(def y (string/split x #","))
(def my-map { :city (y 0)
:lat (y 1)
:long (y 2)
:country (y 3)
:iso2 (y 4)
:admin (y 5)
:capital (y 6)
:pop (y 7)
:popproper (y 8)
})
(read-string (my-map :lat))
)
(defn longReturn [line]
(def x line)
(def y (string/split x #","))
(def my-map { :city (y 0)
:lat (y 1)
:long (y 2)
:country (y 3)
:iso2 (y 4)
:admin (y 5)
:capital (y 6)
:pop (y 7)
:popproper (y 8)
})
(read-string (my-map :long))
)
我在这里做错了什么?对
let
的调用中,距离函数的绑定错误。请阅读一些介绍Clojure的材料,了解如何使用let
本质上,它看起来是这样的:
(let [binding1 value1
binding2 value2]
(some-things-to-do-with binding1 binding2))
但你在帕伦斯身上有一件东西作为约束:
(let [...
(latReturn record1) (Math/toRadians ...)
...]
...)
您不能分配给(latReturn record1)
,因为这是一个函数调用
正如其他人已经指出的,不要在
def
或defn
中使用def
。它总是错误的(或者更确切地说,它总是错误的,直到你学会了足够多的Clojure来知道它可能是正确的非常非常罕见的情况,即使这样,它通常是不正确的)。输入行
看起来像什么?还有,为什么要在函数中定义def
?通常应该使用let
bindingToronto,43.66666 7,-79.416667,加拿大,加利福尼亚州,安大略省,admin,52130003934421,这是可以发送到行中的行之一。另外,是的,我一直想改变def,让绑定def
在defn
中成为clojure中的禁忌。改为使用let
。谢谢,我将函数调用更改为变量名,并将其修复