(defun count-words (string)
"returns the number of words in a string"
(loop for char across string
with count = 0 and in-word = nil
finally (return count)
do (if (alphanumericp char)
(unless in-word
(setf in-word t)
(incf count))
(setf in-word nil))))
Frank Buss wrote:
(defun count-words (string)
"returns the number of words in a string"
(loop for char across string
with count = 0 and in-word = nil
finally (return count)
do (if (alphanumericp char)
(unless in-word
(setf in-word t)
(incf count))
(setf in-word nil))))
Gauche Scheme:
(use srfi-13) ;; string-index string-skip
(use srfi-14) ;; character sets
(define (count-words str)
(define p 0) ;; Position.
(let go ((cnt 0) (inc-a 1) (inc-b 0)
(f0 string-index) (f1 string-skip))
(set! p (f0 str char-set:letter+digit p))
(if p
(go (+ cnt inc-a) inc-b inc-a f1 f0)
cnt)))
gosh> (count-words "hi ?? ho xx23zz")
3
gosh> (count-words " !! ")
0
gosh> (count-words " ")
0
gosh> (count-words " foo---bar ")
2
B. Pym wrote:
Frank Buss wrote:
(defun count-words (string)
"returns the number of words in a string"
(loop for char across string
with count = 0 and in-word = nil
finally (return count)
do (if (alphanumericp char)
(unless in-word
(setf in-word t)
(incf count))
(setf in-word nil))))
Gauche Scheme:
(use srfi-13) ;; string-index string-skip
(use srfi-14) ;; character sets
(define (count-words str)
(define p 0) ;; Position.
(let go ((cnt 0) (inc-a 1) (inc-b 0)
(f0 string-index) (f1 string-skip))
(set! p (f0 str char-set:letter+digit p))
(if p
(go (+ cnt inc-a) inc-b inc-a f1 f0)
cnt)))
gosh> (count-words "hi ?? ho xx23zz")
3
gosh> (count-words " !! ")
0
gosh> (count-words " ")
0
gosh> (count-words " foo---bar ")
2
More understanbable.
(define (count-words str)
(define p 0) ;; Position.
(let go ((cnt 0)
(inc-a 1) ;; Amount to increment cnt when finding alphanumerics.
(inc-b 0) ;; Amount to increment cnt when skipping alphanumerics.
(func-a string-index) ;; Function to find an alphanumeric.
(func-b string-skip)) ;; Function to skip alphanumerics.
(set! p (func-a str char-set:letter+digit p))
(if p
;; When we recurse, we swap the increments and the
;; functions. So if we were finding alphanumerics,
;; during the next pass we'll be skipping alphanumerics.
(go (+ cnt inc-a) inc-b inc-a func-b func-a)
cnt)))
[partition-by chr-isalnum "How, now brow cow!!"]("How" ", " "now" " " "brow" " " "cow" "!!")
(flow "***How now, brown cow?!"(partition-by chr-isalnum))
(flow "***How now, brown cow?!"(partition-by chr-isalnum)
(flow "***How now, brown cow?!"(partition-by chr-isalnum)
(tok #/[\w\d]+/ "***How now, brown cow?!")("How" "now" "brown" "cow")
(len (tok #/[\w\d]+/ "***How now, brown cow?!"))4
| Sysop: | Amessyroom |
|---|---|
| Location: | Fayetteville, NC |
| Users: | 65 |
| Nodes: | 6 (0 / 6) |
| Uptime: | 06:18:25 |
| Calls: | 862 |
| Files: | 1,311 |
| D/L today: |
921 files (14,318M bytes) |
| Messages: | 264,699 |