Path: utzoo!attcan!uunet!lll-winken!lll-tis!ames!ncar!mailrus!ukma!rutgers!ucla-cs!pierce From: pierce@lanai.cs.ucla.edu (Brad Pierce) Newsgroups: comp.lang.scheme Subject: Re: Internal definitions as a combination of LETREC's and LET*'s. Message-ID: <17416@shemp.CS.UCLA.EDU> Date: 1 Nov 88 02:14:24 GMT References: <41415@linus.UUCP> Sender: news@CS.UCLA.EDU Reply-To: pierce@cs.ucla.edu (Brad Pierce) Distribution: na Organization: UCLA Computer Science Department Lines: 48 In article <41415@linus.UUCP> ramsdell@linus.UUCP (John D. Ramsdell) writes: >Yet at top level, it is okay to define values in terms of other >definitions. An obvious way of making internal definitions behave >more like top level definitions, is to specify the order in which the >init bodies are evaluated. I call this interpretation internal >definitions as a combination of LETREC's and LET*'s; a definition >becomes equivalent to the following combinations of LET's and SET!'s: > >(LET () > (DEFINE ) > ... > (DEFINE ) > ) > ==> >(LET (( ) > ... > ( )) > (SET! ) ; init's must be evaluated > ... ; in the order presented. > (SET! ) > ) > Here's one possible problem, at least with the suggested expansion: (define x 5) (let () (define y x) (define x 'any) y) Then wouldn't the result be unspecified, even though the intuitive answer is 5? -- Brad Pierce P.S. Something else I'm curious about... Also, is one allowed to declare the same identifier more than once in the same lambda closure in official Scheme? The Scheme I am currently using doesn't give an error message when I try to do this: ((lambda (x x) x) 1 2) And is it officially legal to "define" something more than once at top level. The reason that I ask is that the expansion looks a little shaky in the case that one would re"define" an identifier in such a clause.