Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sdd.hp.com!think.com!mintaka!bloom-beacon!dont-send-mail-to-path-lines From: STCS8004%IRUCCVAX.UCC.IE@mitvma.mit.EDU Newsgroups: comp.lang.scheme Subject: Normal order (was Logic does not apply) Message-ID: <9105081247.aa11819@mc.lcs.mit.edu> Date: 8 May 91 16:58:00 GMT Sender: daemon@athena.mit.edu (Mr Background) Organization: The Internet Lines: 45 In response to my question: ... *WHY NOT ALLOW THE USER* to specify normal evaluation when required? John Gateley responds : Just out of curiosity, how would you compile the following function: (define foo (lambda (f x y z) (f z y x))) Consider (foo + 1 2 3) and (foo if else then pred)? The arguments to ANY application must be assumed to be passed in normal order unless you can prove otherwise. Is this what you really want? No, and I hope that that isn't the unavoidable consequence! As I understand your point, when the evaluator encounters (foo ... ) it will not know whether to evaluate the arguments or not, since in the definition of 'foo' there is nothing to indicate what is to be done. In the one case all the arguments to (f ...) need to be strict and in the other not. But if, as in Pascal, Algol 60, ... one is allowed to specify the calling style for each parameter at definition time is there still a problem? Thus couldn't (define f (lambda (x #!normal y) (... x ... y ...))) be compiled as though we had written (define f (lambda (x y) (... x ... (y) ...))) and the decision whether or not to pass by value or as a thunk in (f ) be made when checking that 'f' has been given two arguments - whether compiling or interpreting? Gordon Oulsnam stcs8004@iruccvax.ucc.hea.ie PS to all readers: I will be incommunicado from 1600 GMT 91/05/08 to 91/05/23 so cannot respond immediately to messages *received* in that period (Digest 211 and later) but will reply/summarize as appropriate on return. G.O.