Re: Cprod (Cartesian Product) in Lisp (or Scheme)

Liste des GroupesRevenir à cl lisp 
Sujet : Re: Cprod (Cartesian Product) in Lisp (or Scheme)
De : HenHanna (at) *nospam* devnull.tb (HenHanna)
Groupes : comp.lang.lisp
Date : 23. May 2024, 19:27:04
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v2nu99$1qmlm$4@dont-email.me>
References : 1 2
User-Agent : Mozilla Thunderbird
On 5/23/2024 8:46 AM, Spiros Bousbouras wrote:
On Tue, 21 May 2024 12:18:52 -0700
HenHanna <HenHanna@devnull.tb> wrote:
>
>
How would you write this in Lisp (or Scheme) ?
>
>
>
in Python...    (writing this out: itertools.product([0, 1], repeat=N )
>
The value can be a list or a Tuple.
>
                  cprod([0, 1], 1) => ((0) (1))
>
                  cprod([0, 1], 2) => ((0,0) (0,1) (1,0) (1,1))
 This is cartesian power rather than arbitrary cartesian product. Here
is a Common Lisp version. It only works for vectors.
 (defun cartesian-power
         (vector power
          &aux (len (length vector)) (wheels (make-array power :initial-element 0))
               result (posres 0)
         )
     (when (or (eql power 0) (eql len 0))
         (return-from cartesian-power (make-array 0)))
     (setq result (make-array (expt len power)))
     (do   () (nil)
         (setf (aref result posres)
               (map 'vector (lambda (a) (aref vector a)) wheels))
         (incf posres)
         (let   ((pos (position-if (lambda (a) (< a (1- len))) wheels)))
             (unless pos (return-from cartesian-power result))
             (incf (aref wheels pos))
             (dotimes (i pos) (setf (aref wheels i) 0)))))
Thanks!

Date Sujet#  Auteur
21 May 24 * Cprod (Cartesian Product) in Lisp (or Scheme)4HenHanna
23 May 24 +* Re: Cprod (Cartesian Product) in Lisp (or Scheme)2Spiros Bousbouras
23 May 24 i`- Re: Cprod (Cartesian Product) in Lisp (or Scheme)1HenHanna
24 May 24 `- Re: Cprod (Cartesian Product) in Lisp (or Scheme)1Kaz Kylheku

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal