Path: news.daimi.aau.dk!not-for-mail From: Erik Corry Newsgroups: daimi.beta Subject: =?ISO-8859-1?Q?Singul=E6re?= patterns og INNER Date: 24 Sep 1998 19:40:03 GMT Organization: University of Aarhus, Department of Computer Science (DAIMI) Lines: 71 Message-ID: <6ue76j$cld$1@xinwen.daimi.aau.dk> NNTP-Posting-Host: nerva.daimi.aau.dk Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Trace: xinwen.daimi.aau.dk 906666003 12973 255.255.255.255 (24 Sep 1998 19:40:03 GMT) X-Complaints-To: news@daimi.aau.dk NNTP-Posting-Date: 24 Sep 1998 19:40:03 GMT User-Agent: tin/pre-1.4-980818 ("Laura") (UNIX) (IRIX/6.3 (IP32)) Xref: news.daimi.aau.dk daimi.beta:10375 Hej, Beta har ikke ret mange loop konstruktioner. Men kan kan lave sig nogle nye f.eks. forTo som er i standard biblioteket eller de funky som f.eks. search som virker på lister. Men hvis man gør det, kan man ikke bruge INNER inde i sin loop. Det er jo tit det man vil. Hvis jeg f.eks. printer tallene fra 4 til 7: (4, 17) -> forTo (# do inx -> putint; putline; #); Hvis nu jeg af mystiske grunde tit har brug for sådan noget kan jeg lave en pattern til det. Jeg vil gerne lave en ny loop der laver ting 14 gange, hvor inx varierer fra 4 til 17: MyFourSeventeenClass: (# do (4, 17) -> forTo (# do INNER #); #); Der får jeg allerede en advarsel om at INNER ikke kan bruges, og hvis jeg prøver at bruge den: MyFourSeventeenClass (# do inx -> putint; putline; #); Så virker det ikke, for inx findes ikke. Den åbenlyse rettelse: MyFourSeventeenClass: (# inx: @integer; do (4, 17) -> forTo (# do INNER #); #); virker heller ikke, for MyFourSeventeenClass har ingen INNER clause. Man kan selvfølgelig lave det uden at bruge forTo: MyFourSeventeenClassThatWorks: (# iny, inx: @integer; do (for iny: 14 repeat iny + 3 -> inx; INNER for); #); do MyFourSeventeenClassThatWorks (# do inx -> putint; putline; #); Men så er der ikke så meget ved ting som forTo, for de kan ikke bruges det meste af tiden. Og det er endnu værre for ting som search på lister der ikke er så enkle som forTo. Så kan man lave en hjælpepattern: MyFourSeventeenClassThatWorks2: (# DoTheStuff:< (# inx: @integer; enter inx do INNER; #); do (4, 17) -> forTo (# do inx -> DoTheStuff #); #); Men den er ikke ret pæn når den bliver brugt: MyFourSeventeenClassThatWorks2 (# DoTheStuff:: (# do inx -> putint; putline; #); #); Er der en smuk løsning? Ville det være muligt at omdefinere INNER for singulære patters til at være en INNER for den omgivende klasse (det er ikke et forslag jeg har gennemtænkt)? -- Erik Corry