0

我开始学习 clojure,但我被这件事困住了,我对 java 有一定的了解,也许我的方法太像 java,但我真正的问题是 - 我做了一个让用户输入一些字符串的函数,现在我想要什么时候用户输入这些字符串以创建一个新对象,然后将其插入到列表中,以便稍后显示该列表的元素,如何完成?我试过了...

(defn unesi []

   (println "Unesite ime i prezime studenta: ")

   (let [imePrezime (read-line)]
     (println "Unesite index studenta: ")
      (let [index (read-line)]
         (println "Unesite email studenta: ")
         (let [email (read-line)]
          (def s1 {:ime imePrezime :index index :email email})
           (println "Uspjesno ste unijeli studenta!")
         )

       )

   )

   )

我已经设法制作了一个新对象,但它始终是同一个对象,我怎样才能始终添加一个新对象?以及如何将其添加到列表中以稍后显示元素?

4

1 回答 1

2

我不确定您是否从正确的示例开始使用 clojure。Clojure支持 immutability,而您只是想改变一些东西。

尽管如此,解决你的问题。

  1. 我在函数调用之间使用原子 students作为列表状态。

  2. 我定义了一个本地函数read-input,它打印输入消息,然后读取该行以进行一点重用。

  3. 每个新student的都被合并到现有的students列表中,并且列表与新的交换。

代码:

 (def students (atom []))

 (defn unesi []
    (letfn [(read-input [message]
            (println message)
            (read-line))]
     (let [imePrezime (read-input "Unesite ime i prezime studenta: ")
           index (read-input "Unesite index studenta: ")
           email (read-input "Unesite email studenta: ")]
         (swap! students #(conj % {:ime imePrezime :index index :email email}))
         (println "Uspjesno ste unijeli studenta!"))))

然后,您可以使用deref运算符访问列表@

user> @students
  =>  [{:ime "guille", :index "3", :email "guille@email"} 
       {:ime "cacho", :index "pedro", :email "lala"}]
于 2013-10-26T13:55:12.970 回答