당신이 클로저에 적응하는 것처럼 보입니다 :-) 나는 같은 과정을 겪었습니다. 잠깐만, 그만한 가치가있을거야!
첫 번째 :지도가 함수의 결과를 새 컬렉션에 저장한다는 사실을 깨닫는 것이 중요합니다. cfrick이 언급 한 것처럼 println
은 nil
을 반환하고 assoc은지도를 변경하지 않습니다.
[
{ :code 1 :instructor "blah"}
{ :code 2 :instructor "boo" }
]
당신은 와서이 값이 필요합니다 : 모든 DICT 그래서 같은 두 개의 키를 가지고 dicts의 컬렉션을, 갖고 싶어 :
은 당신이 무엇을하려고 여기에 조금 같은데요
- 당신은 아마 더 작은 부분으로이 기능을 분할 할 : 파일에서,하지만 당신은 단지 라인이 "201609"를 포함하지만 "TBA"
먼저 몇 가지 일반적인 발언은 어디 라인을 저장할. 하나는 줄 수표 (contains 201609 but not tba
), 다른 하나는 파일을 읽을 수 있습니다 ...
- 저는 이것이 당신의 질문의 제목이라는 것을 알고 있습니다 만, 아마도 글로벌 변수를 변경하는 것보다 더 좋은 방법이있을 것입니다. 어쩌면 당신은 함수를 만들 수
readFile
반환 테이블?
- 함수에 인수를 전달할 수 있는지 확인하십시오.
- 줄을 사용하여 무엇을 하려는지 확실하지 않습니다.
(doseq [[...
여기에 더 많은 내용을 보내주십시오. 지금과 같이이 함수를 호출 할 수 (ns test
(:require [clojure.string :as s]
[clojure.java.io :as io]))
(defn line-filter [include exclude line]
(and (not (s/includes? line exclude))
(s/includes? line include)))
(defn process-line [line]
(let [line-parts (s/split line #";")
code (nth line-parts 3)
instructor (nth line-parts 19)]
{:code code :instructor instructor}))
(defn read-file [file-name]
(s/split (slurp (io/resource file-name)) #"\n"))
(defn parse-lines [lines]
(map process-line lines))
(defn read-file-and-parse
"This function will read a file, process the lines, and output a collection of maps"
[filename search-for exclude]
(parse-lines
(filter #(line-filter search-for exclude %)
(read-file filename))))
: 나는 여기
이 가능한 솔루션을 무시합니다 (read-file-and-parse "test.txt" "201609" "TBA")
당신이 당신의 table
에이 함수의 결과를 추가하려면 concat
을 사용할 수 있습니다. 그러나 다시 말하지만, 이것은 (새로운 항목이 추가 된) 목록의 새 버전을 반환하고 이전에 정의한 항목을 변경하지 않습니다.
함수 프로그래밍에 오신 것을 환영합니다 .-)))
'테이블'이란 무엇입니까? 또한'println'은'nil'을 리턴하고'assoc'은 어딘가에 넣을지도 모르는'(def table {})'을 수정하지 않습니다. – cfrick