Liebe scheme-Profis
Ich scheitere wieder einmal an etwas banalem:
\version "2.19.83"
myKey = "k1"
FuncA =
#(define-void-function
(aList)
(list?)
(cdr (assoc myKey aList))
)
lA = #'(("k1" . "v1") ("k2" . "v2"))
\FuncA \lA % geht
lB = #'((myKey . "v1") ("k2" . "v2"))
\FuncA \lB % geht nicht
Warum funktioniert der zweite Aufruf nicht? Wie bringe myKey in die alist, so dass cdr dann funktioniert?
Ich schätze, es hat etwas dem Hochkomma beim Bilden der alist zu tun, aber was?
Wie immer Danke im Voraus und schöne Grüsse aus der CH
Köbi
Hi,
schau Dir an was Du geschrieben hast:
myKey = "k1"
lB = #'((myKey . "v1") ("k2" . "v2"))
\void \displayScheme \lB
=>
(list (cons (quote myKey) "v1") (cons "k2" "v2"))
myKey ist also ein symbol und hat nichts mit der Definition gleichen Namens zu tun, es wird nicht evaluiert.
Siehe auch meinen Beitrag:
https://archiv.lilypondforum.de/index.php/topic,1762.msg9753.html#msg9753 (https://archiv.lilypondforum.de/index.php/topic,1762.msg9753.html#msg9753)
Deshalb:
myKey = "k1"
lBh = #`((,myKey . "v1") ("k2" . "v2"))
\void \displayScheme \lBh
=>
(list (cons "k1" "v1") (cons "k2" "v2"))
Gruß,
Harm
Hallo Harm
Vielen Dank! Den verlinkten Artikel habe ich zwar mal gelesen, aber dass das jetzt meinen Fall betrifft, darauf wäre ich natürlich nicht gekommen...
Nun stehe ich schon an der nächsten Stelle an. Wie kann ich in einer alist eine andere alist als value einfügen?
\version "2.19.83"
myKey = "k1"
FuncA =
#(define-void-function
(aList)
(list?)
(cdr (assoc myKey aList))
)
lA = #'(("k1" . "v1") ("k2" . "v2"))
% \void \displayScheme \lA
lB = #`((,myKey . "v3") ("k4" . "v4"))
% \void \displayScheme \lB
lC = #`((,myKey . "v3") ("k4" . ,lA))
\void \displayScheme \lC
=>
(list (cons "k1" "v3")
(list "k4" (cons "k1" "v1") (cons "k2" "v2")))
kommt dabei raus. Es müsste aber
(list (cons "k1" "v3")
(cons "k4" (list (cons "k1" "v1") (cons "k2" "v2"))))
sein (schätze ich mal).
Gruss, Köbi
Zitat
(list (cons "k1" "v3")
(list "k4" (cons "k1" "v1") (cons "k2" "v2")))
kommt dabei raus. Es müsste aber
(list (cons "k1" "v3")
(cons "k4" (list (cons "k1" "v1") (cons "k2" "v2"))))
Das ist dasselbe:
\void \displayScheme
#(equal?
(list (cons "k1" "v3")
(list "k4" (cons "k1" "v1") (cons "k2" "v2")))
(list (cons "k1" "v3")
(cons "k4" (list (cons "k1" "v1") (cons "k2" "v2")))))
=>
#t
Worauf willst Du hinaus?
Gruß,
Harm