Re: Macro noob

Liste des GroupesRevenir à cl lisp 
Sujet : Re: Macro noob
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp
Date : 18. Jun 2025, 18:56:30
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <102uukd$393s0$1@dont-email.me>
References : 1
User-Agent : XanaNews/1.18.1.6
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)))
 

Date Sujet#  Auteur
18 Jun 25 * Re: Macro noob3B. Pym
18 Jun 25 `* Re: Macro noob2B. Pym
18 Jun 25  `- Re: Macro noob1Kaz Kylheku

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal