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)))))
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))
(rperm '(0 1) 2)((0 0) (0 1) (1 0) (1 1))
(take 5 (rperm #\A..#\Z 15))((#\A #\A #\A #\A #\A #\A #\A #\A #\A #\A #\A #\A #\A #\A #\A)
(take 5 (rperm (join #\A..#\Z) 15))("AAAAAAAAAAAAAAA" "AAAAAAAAAAAAAAB" "AAAAAAAAAAAAAAC" "AAAAAAAAAAAAAAD"
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 417 |
Nodes: | 16 (2 / 14) |
Uptime: | 14:56:48 |
Calls: | 8,760 |
Calls today: | 3 |
Files: | 13,287 |
Messages: | 5,963,767 |