나는 최종 시험을 준비하기 위해 clojure를 처음 접하고 일부 시험 문제를 연습하기가 쉽습니다.클로저에있는 맵에서 문자열의 빈도를 계산하십시오.
모든 이름의 빈도를 파일에서 찾으려고합니다. 파일을 한 줄씩 읽었을 때 특정 키워드가지도에 포함되어 있으면 각 문자열을 저장합니다. 반복을 원하지 않기 때문에, 나는 그것 앞에서 뚜렷하게 설명하려고 노력하고있다. 그러나 나는 여전히 반복되는 요소들을 계속 간직하고있다.
(defn readFile []
(map (fn [line] (clojure.string/split line #";"))
(with-open [rdr (reader "C:/Users/Rohil's Computer/Desktop/textfile.txt")]
(doseq [[idx line] (map-indexed vector(line-seq rdr))]
(if(.contains line "2007")
(if(.contains line "May")
(if(not(.contains line "Batman"))
(map save [(nth(clojure.string/split line #";")3 (nth(clojure.string/split line #";")19)])
(distinct(map))
)
)
)
)
)
)
)
여기 내 샘플 출력 : 내가이 철인 요소를 제거하고자합니다.
(May 2007 Spiderman)
Clojure2.clj:
(March 2007 Iron man)
Clojure2.clj:
(March 2007 Iron man)
Clojure2.clj:
(April 2007 Captain America)
내가 누락 된 부분이 있습니까?
모두 버리지 말고 다음과 같이 개선해야 할 부분이 있습니다. 1. 'distinct'는 컬렉션을 취합니다. 당신은'map' 함수를 전달하고 있습니다. 그래서 당신은 당신이 원하는 것을 얻지 못합니다. 2. 이것에 대한 최선의 대답은 중첩 된'if '문과 관련이있을 것 같지 않습니다. 테스트 할 값을 벡터에 넣은 다음 함수에 대해 반복합니다. 3. 기능을 작은 조각으로 나누는 것을 고려하십시오. – jmargolisvt