5. November 2019 11:19, "Thomas Morley" <thomasmorle...@gmail.com> schrieb:
> Am Di., 5. Nov. 2019 um 09:14 Uhr schrieb Karsten Reincke > <k.rein...@fodina.de>: > >> On Mon, 2019-11-04 at 23:06 +0100, Thomas Morley wrote: >> Am Mo., 4. Nov. 2019 um 18:00 Uhr schrieb Karsten Reincke >> <k.rein...@fodina.de>: >> [...] >> Let me quote another part of my reply: >> >> Am Fr., 1. Nov. 2019 um 16:01 Uhr schrieb Thomas Morley >> <thomasmorle...@gmail.com>: >> >>> For variable amount of args I'd go for list? (or the like) and let the >>> body of your code sort it out. >> >> And that's basically what you do in your example-code. >> >> You are totally correct. Unfortunately, I did not read your mail as >> thoroughly as >> it should had been done. So, I had to find th solution by myself. But of >> course. >> it stays your idea. > > Well, not my idea, I just pointed to that coding-principle > >>> #(define (assign keyValue assocList defaultValue) >>> (string? list?) >> ^^^^^^^^^^^^^^^^^^ >> As far as I can tell this line is superfluous, returning #f. >> >> Yep, you are right. Due to the fact, that I later on decided also to allow >> other >> default values than strings, I erased the third type test without >> considering that >> then a third type is missed. So it is indeed better to erase the complete >> line. > > You miss the point. > There is no type-checking of this kind in guile-definitions. > The line (string? list?) is an expression of its own, returning #f. > If you try three elements there like in > (define (x a b c) (string? list? string?) (list a b c)) > you'll get an error. > > Type-checking of this kind is done in _LilyPond's_ functions and for > markup-commands. > Don't confuse them. To be more explicit: (string? list?) is an expression that calls the procedure `string?` and passes it the value `list?`. What this effectively does is to check whether `list?` is a string, and since `list?` is a procedure itself the result of the evaluation is `#f`. Urs > > Cheers, > Harm