31 mar 2009 kl. 17.38 skrev Andreas Davour: > On Tue, 31 Mar 2009, Ingvar wrote: > >> Jag skriver: >>> Att författaren därtill inte verkar ha >>> förstått till fullo vad DEFVAR faktiskt gör är skrämmande. >> >> Lite fånigt exempel i det lilla, men tänk dig en medelstor till >> brutal-stor kodbas (10-200 kodfiler, 50 KB-någon GB kod): >> >> ;;(defvar incr 0) >> >> (defun make-incrementer (base &optional (incr 1)) >> (lambda () (incf base incr))) >> >> (format t "Test result: ~a~%" >> (let ((fun (make-incrementer 1))) >> (loop for i from 1 to 10 >> collect (funcall fun)))) >> >> Tryck i en fil och kör. Tag sedan bort kommentaren innan defvar och >> kör. Att glatt säga "det finns en kodkonvention, men jag tycker den >> är >> ful, så jag ignorerar den" i ett introduktionsmaterial, där >> resultatet >> av att INTE anamma konventionen är ypperst svårfunna buggar är, i min >> mening, inte försvarbart. > > Oavsett Xach så verkar ju boken onekligen ha brister!
Man behöver kanske inte vara så förmäten. Jag har i mitt arbete förmånen(?) att ofta använda en annnan Lispdialekt, där en konvention för dynamiska variabler inte existerar, och där asterisk inte utan vidare kan användas i symbolnamn. Jag kan försäkra att det går att hålla ordning på sina program ändå. Naturligtvis vill man alltid veta om en variabel i ett visst sammanhang avser en dynamisk eller lexikal sådan, men det går att göra på många olika sätt. Man kan ha andra sorters konventioner till exempel. Nu använder jag för egen del alltid asterisk-konventionen när jag programmerar Common Lisp, eftersom den är etablerade för den dialekten, men jag skulle inte förkasta en hel bok för att författaren möjligen har egna konventioner i detta avseende. Ingvars exempel ovan är tämligen krystat, och avsett att vara det. Men innan vi har läst boken vet vi faktiskt inte om det är ett exempel som alls motsvarar vad författaren ägnar sig åt. Björn Lindberg _______________________________________________ Lisp mailing list Lisp@lisp.se http://mailman.nocrew.org/cgi-bin/mailman/listinfo/lisp