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") 

Es wird "gefunden" so viele wie die Anzahl der Zeilen in der Textdatei. Warum ist die Aussage immer wahr? Das Wort "Wizard" existiert in der Wörterbuchdatei.Clojure - Vergleichen einer Zeile mit einer Zeichenfolge

+1

'compare' gibt eine Zahl zurück, die im booleschen Kontext immer zu' true' ausgewertet wird. – Lee

+0

@Lee identisch? hat auch nicht funktioniert. Wie überprüfen Sie? – iyazici

+0

Vergleichen liefert -1, 0 oder 1, abhängig von der lexikographischen Reihenfolge der verglichenen Strings. Also, wenn 's1 == s2 => (vergleiche s1 s2) == 0', und die minimale Änderung zu '(null? (vergleiche line word)) 'sollte das beheben .. Aber ich würde lieber mit einfachen' (= (clojure.string/trim line) wort) gehen ' – leetwinski

Antwort

0

Gemäß der Dokumentation gibt die compare function eine negative Zahl, Null oder eine positive Zahl zurück, abhängig von der Reihenfolge ihrer Parameter. Zahlen werden als truthy values betrachtet, so dass sie immer den dann Zweig eines bedingten Ausdrucks ausführen. Die einzigen falschen Werte Werte in Clojure sind nil und false.

Wenn Sie überprüfen wollen, dass line gleich word Sie nur equality mit (= line word) verwenden können.

Verwandte Themen