help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Program problem


From: Stephen Berman
Subject: Re: Program problem
Date: Wed, 29 Nov 2023 17:37:31 +0100
User-agent: Gnus/5.13 (Gnus v5.13)

On Wed, 29 Nov 2023 17:20:30 +0100 Stephen Berman <stephen.berman@gmx.net> 
wrote:

[...]
> As food for thought and for you to experiment with, here is an
> alternative implementation that uses some higher-level elisp functions
> to avoid lower-level functions like setcar and nthcdr, and hence shorten
> the code.  Also, it restructures the data into a form that seems to me
> better suited to what you want, given your description.  The doc string
> tries to explain that:

I meant to add here that the last sentence of the doc string suggests
how to check for bad input, but I omitted adding such code for the sake
of brevity.

Steve Berman

> (defun fill-rows (dim rows)
>   "Fill a square matrix of dimensions DIM with values from ROWS.
> DIM is an integer specifying the number of rows and columns in
> the matrix.  ROWS is an alist with elements (ROW . ELEMENTS),
> where ROW specifies the (1-based) row number of the matrix and
> ELEMENTS is a string whose characters are numerals specifying the
> contents of the cells of ROW (in which each numeral in ELEMENTS
> has been converted to the corresponding integer).  Each cell of
> the rows not specified by ROWS is filled with 0.  Since the
> result should be a square matrix, the lengths of ROWS and
> ELEMENTS must equal DIM and each ROW must be an integer between 1
> and DIM (inclusive)."
>   (let (matrix)
>     (dotimes (i dim)
>       (let* ((rpair (assq (1+ i) rows))
>            (row (if rpair
>                      (mapcar #'string-to-number
>                              (mapcar #'string
>                                      (string-to-list (cdr rpair))))
>                    (make-list dim 0))))
>       (setq matrix (append matrix (list row)))))
>     matrix))
>
> Here's the invocation with your test data:
>
> (fill-rows 9 '((1 . "123456789") (3 . "987654321") (5 . "123498765")))
>
> I hope that was helpful.
>
> Steve Berman



reply via email to

[Prev in Thread] Current Thread [Next in Thread]