2017-10-03 4 views
0
(def filename "dictionary2.txt") 

    (defn check_word [filename word] 
     (with-open [r (clojure.java.io/reader filename)] 
     (doseq [line (line-seq r)] 
      (if (compare line word) 
      (println word))))) 

    (check_word filename "wizard") 

텍스트 파일의 줄 수만큼 "found"를 인쇄합니다. 왜 진술이 항상 사실로 돌아가는가? "wizard"라는 단어가 사전 파일에 존재합니다.Clojure- 줄과 문자열 비교

+1

'compare'는 부울 컨텍스트에서 항상 'true'로 평가되는 숫자를 반환합니다. – Lee

+0

@Lee 동일합니까? 어느 쪽도 일하지 않았다. 어떻게 확인하나요? – iyazici

+0

비교는 비교 된 문자열의 사전 식 순서에 따라 -1, 0 또는 1을 반환합니다. 그래서's1 == s2 => (s1 s2 비교) == 0' 일 때,'(0? 라인 단어를 비교))'그것을 해결해야합니다 ..하지만 나는 오히려 간단한'(= (clojure.string/trim line) 단어)' – leetwinski

답변

0

설명서에 따르면 compare function은 매개 변수의 순서에 따라 음수, 0 또는 양수를 반환합니다. 숫자는 truthy values으로 간주되므로 항상 을 입력 한 다음 조건부 분기를 실행합니다. Clojure의 유일한 falsey 값은 nilfalse입니다.

당신이 (= line word)와 단지 equality을 사용할 수 있습니다 wordline이 같은지 확인하려면

.