माइकल्स जरूरी जावा समाधान के आधार पर, यह एक मुहावरेदार (आलसी दृश्यों) Clojure समाधान है:
(ns stackoverflow
(:import (java.nio.charset Charset CharsetEncoder)))
(defn all-letters [charset]
(let [encoder (. (Charset/forName charset) newEncoder)]
(letfn [(valid-char? [c]
(and (.canEncode encoder (char c)) (Character/isLetter c)))
(all-letters-lazy [c]
(when (<= c (int Character/MAX_VALUE))
(if (valid-char? c)
(lazy-seq
(cons (char c) (all-letters-lazy (inc c))))
(recur (inc c)))))]
(all-letters-lazy 0))))
अद्यतन: धन्यवाद इस बेहतर उच्च स्तरीय समाधान के लिए cgrand:
(defn letters [charset-name]
(let [ce (-> charset-name java.nio.charset.Charset/forName .newEncoder)]
(->> (range 0 (int Character/MAX_VALUE)) (map char)
(filter #(and (.canEncode ce %) (Character/isLetter %))))))
लेकिन मेरा पहला दृष्टिकोण
user> (time (doall (stackoverflow/all-letters "ascii")))
"Elapsed time: 33.333336 msecs"
(\A \B \C \D \E \F \G \H \I \J \K \L \M \N \O \P \Q \R \S \T \U \V \W \X \Y \Z \\
a \b \c \d \e \f \g \h \i \j \k \l \m \n \o \p \q \r \s \t \u \v \w \x \y \z)
और अपने समाधान
user> (time (doall (stackoverflow/letters "ascii")))
"Elapsed time: 666.666654 msecs"
(\A \B \C \D \E \F \G \H \I \J \K \L \M \N \O \P \Q \R \S \T \U \V \W \X \Y \Z \\
a \b \c \d \e \f \g \h \i \j \k \l \m \n \o \p \q \r \s \t \u \v \w \x \y \z)
के बीच performace तुलना काफी रोचक है ।
स्रोत
2010-04-05 18:49:53
मैं पाइथन परिणाम पूरी तरह से गलत मानता हूं। Ä, é या ß के बारे में क्या? –
मुझे लगता है कि अगर मैं पाइथन के 'string.letters' पर प्रलेखन देता हूं तो यह मदद करेगा: http://docs.python.org/library/string.html#string।अक्षरों यह ASCII- आधारित है, इसलिए लौटाया गया मूल्य सिस्टम-निर्भर है। –
"यह मूल्य सिस्टम-निर्भर" कैसे है "यह ASCII- आधारित" से पालन करता है? ASCII अच्छी तरह से परिभाषित है और प्रत्येक प्रणाली पर बिल्कुल वही है। तो अगर यह वास्तव में ASCII- आधारित था, तो परिणाम हमेशा वही होगा। "ASCII" किसी भी 8-बिट वर्ण एन्कोडिंग का पर्याय नहीं है। –