Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

mapcar on dotted lists #54

Open
Open
@q3cpma

Description

@q3cpma

While CL has a concept of improper (dotted or circular) lists, very few standard functions support them. Today, while tinkering with my NIHuniversal let, I found myself in need of amapcar equivalent tosubst to call on adestructuring lambda list which can be dotted.

Here's a simple and relatively efficient version (needs a basic queue structure sinceloop can'tcollect infinally and doesn't give access to the raw tail cons cell anyway):

(defunmake-queue (&rest initial-contents)  (let ((queue (consnil (copy-list initial-contents))))    (setf (car queue) (last queue))    queue))(declaim (inline push-queue))(defunpush-queue (obj queue)  (let ((new-tail (list obj)))    (setf (cdar queue) new-tail          (car queue)  new-tail)))(defunmapcar-dotted (funlist)  (let ((queue (make-queue)))    (do ((celllist (cdr cell)))        ((atom cell) (progn                       (when cell                         (setf (cdar queue) (funcall fun cell)))                       (cdr queue)))      (push-queue (funcall fun (car cell)) queue))))

Basic test:

(formatt"~@{~A~%~}"        (mapcar-dotted#'identitynil)        (mapcar-dotted#'identity'(1))        (mapcar-dotted#'identity'(123))        (mapcar-dotted#'identity'(12.3)));; NIL;; (1);; (1 2 3);; (1 2 . 3)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


      [8]ページ先頭

      ©2009-2025 Movatter.jp