Alex Vong (2016-09-24 16:22 +0800) wrote: > Alex Kost <alez...@gmail.com> writes: > >> John Darrington (2016-09-17 12:11 +0200) wrote: >> >>> On Sat, Sep 17, 2016 at 05:38:26PM +0800, Alex Vong wrote: >> [...] >>> > > + "contrib/mmuegel" "devtools/bin/configure.sh") >>> > > + (("/bin/sh") (which "bash"))) >>> > > + >>> > > + (substitute* "devtools/bin/Build" >>> > > + (("SHELL=/bin/sh") (string-append "SHELL=" (which "bash")))) >>> > > + #t)) >>> > I think the `#t' is not neccessary here, since `substitute*' >>> uses >>> > `substitute', which will either return #t or throw an exception. >>> > >>> > WTF?? Didn't you complain earlier this week when I *didn't* put #t >>> in >>> > exactly this >>> > scenario?? >>> > >>> Yes, I am a different Alex :) >>> Also, it seems we are not being consistent here, sometimes we put `#t' >>> after `substitute*', sometimes we don't. Anyone has an idea? >>> >>> I did raise some suggestions in my earlier posts. But again I don't >>> have any strong >>> opinion. >> >> I have a strong opinion: if a docstring of a procedure says what value >> it returns, we can rely on it, otherwise we should not guess what value >> will be returned. In case of 'substitute*' (and 'substitute'), the >> returned value is not specified, so I think if a phase ends with >> 'substitute*', we should (or even must) add #t after it. > > I see your point that one should not be relying on undocumented > features, which I agree. But I also see an alternative: to make > 'substitute*' either return true or throw an exception and document > it. I think the heart of the problem is scheme is "untyped", so we rely > on the documentation. What do you think?
I don't think my opinion matters, I'm not the man to decide. As for me, I would prefer if 'substitute*' returned #t if substitution was successful and #f if it failed (if nothing was substituted). OTOH 'substitute*' is only one of the several procedures that are used often in phases; there also can be met such general guile procedures as 'setenv', 'copy-file', etc. After them (in the end of the phases) we have to use #t anyway. -- Alex