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