2017-07-04 12 views
-1

Clojureに新しく追加されました。私はファイル内のアイテムを見つけ、値を変更して保存する必要がありますが、値を変更することはできません。私は配列の新しいコピーを作る必要がありますか?Clojure変更対象アイテム

ファイル:

{:name "John", :index 0} 
{:name "Ivan", :index 1} 
{:name "Niki", :index 2} 

コード:

(ns test1.core 
    (:gen-class)) 

(use 'clojure.java.io) 
(require '[clojure.string :as str]) 

(def file-data "names.txt") 

(def findName "Ivan") 

(defn write-data[xs, file] 
    (with-open [wrtr (writer file)] 
     (doall (map #(.write wrtr (str % "\n")) xs)))) 

(defn read-data[file] 
    (with-open [rdr (reader file)] 
     (doall (map #(load-string %) (line-seq rdr))))) 


(defn -main [] 

    (def data (read-data file-data)) 

    (doseq [line data] 
    (if (= (line :name) findName) 
     (update-in line [:index] inc) 
     (println "No"))) 
    (println data)) 

答えて

1

あなたのコードは、それが不変で、とにかく変更することはできませんので、良いですがどのような方法でdataを変更されていません。 update-inフォームのwrite-dataへの呼び出しをラップしてみてください。

小さなものもあります:dataは、-mainの外に移動する必要があります。

関連する問題