Deutsch   English   Français   Italiano  
<v76fmu$1d3tm$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!npeer.as286.net!npeer-ng0.as286.net!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: "B. Pym" <Nobody447095@here-nor-there.org>
Newsgroups: comp.lang.lisp
Subject: Re: make a list of different random numbers
Date: Tue, 16 Jul 2024 18:55:30 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 57
Message-ID: <v76fmu$1d3tm$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Tue, 16 Jul 2024 20:55:30 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="5730bdcd22b644933384107bd30ba9a2";
	logging-data="1478582"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/i847aJjRcTrR3/TxVJkEw"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:pICbOc9GU0FichAajEQnWs0rQtk=
Bytes: 2316

Pascal J. Bourguignon wrote:

> > i would like to get a list of 4 different random numbers.
> > (wk wn wb bk)
> > i started this code :
> >
> > (defun random-position () (1+ (random 64)))
> >
> > (defparameter wk (random-position))
> >
> > (excl:until (not (= wb wk)) (setf wb (random-position)))
> >
> > but it is not working. i just need to ensure that none of the
> > positions
> > are the same. please to help.
> >
> > thanks, david
> 
> 
>     (do ((results '()                results)
>          (alea     (random-position) (random-position)))
>         ((<= 4 (length results))
>          results)
>       (pushnew alea results))
> 
> or:
> 
>     (loop
>         :with results = '()
>         :for alea = (random-position)
>         :while (< (length results) 4)
>         :do (pushnew alea results)
>         :finally (return results))

Pascal hasn't yet mastered "do"; perhaps he never will.

Gauche Scheme

(use srfi-1)  ;; lset-adjoin (To act as "pushnew".)
(use srfi-27) ;; random-integer

(define (random-position) (+ 1 (random-integer 64)))

(do ((results '() (lset-adjoin =  results (random-position))))
  ((> (length results) 3)  results))

  ===>
(26 31 48 49)

Check for duplication:

(length (delete-duplicates
  (do ((results '() (lset-adjoin = results (random-position))))
    ((> (length results) 63)  results))))

  ===>
64