Function Clojure中允许在一个函数内调用多个函数?

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) :

我试图从城市hashmaps中获取某些值,以实现我的距离函数:

但每次我这样做时,它都会显示不支持的绑定形式:(latreturnrecord1)

以下是我的latReturn和longReturn函数:

(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
。谢谢,我将函数调用更改为变量名,并将其修复