|
From: | Gianmaria Lari |
Subject: | Re: scheme set list function |
Date: | Sat, 6 Apr 2019 17:20:44 +0200 |
Am Sa., 6. Apr. 2019 um 16:11 Uhr schrieb Gianmaria Lari
<address@hidden>:
>
> I wrote this function
>
> #(define (resetList l) (set! l '()))
>
>
> that I would like to set a list to an empty list. This is an example of use:
>
> \version "2.21.0"
> #(define mylist '(1 2 3))
> \markup #(object->string mylist) %this prints (1 2 3)
>
> #(define (resetList l) (set! l '()))
> #(resetList mylist)
> \markup #(object->string mylist) % this I would like it prints () but it prints (1 2 3)
>
> I think the problem is related to the fact resetList changes mylist locally (sort of) but I have no idea how I can fix it. Any help?
>
> Thank you, g.
One possibility is to use a macro:
#(define-macro (reset-list l) `(set! ,l '()))
#(define (allButLast l) (reverse (cdr (reverse l))))#(define (numberInc l) (append (allButLast l) (list (1+ (last l)))))
\version "2.21.0"#(define (allButLast l) (reverse (cdr (reverse l))))#(define (numberInc l) (append (allButLast l) (list (1+ (last l)))))#(define mylist '(1 2 3))\markup #(object->string mylist)#(set! mylist (numberInc mylist))\markup #(object->string mylist)
#(define-macro (numberInc l) `(set! ,l (append (allButLast l) (list (1+ (last l))))))
\version "2.21.0"#(define (allButLast l) (reverse (cdr (reverse l))))#(define-macro (numberInc l) `(set! ,l (append (allButLast l) (list (1+ (last l))))))#(define mylist '(1 2 3))\markup #(object->string mylist)#(numberInc mylist)\markup #(object->string mylist)
[Prev in Thread] | Current Thread | [Next in Thread] |