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 に答える