> I had a crack at it in Lisp. My version doesn't work - but of greater > concern to me is that it doesn't appear nearly as compact as the C > version. Anyway, here's my Lisp code (no prizes for guessing that I'm a > noob to Lisp):
Lot's of things you can write more compact. But compact is not always the best way to write source. For me the most important criteria is that I can return to some source after, say, a year absence and everything is clear and readable again. > > (defconstant delta 2654435769 ) ; delta= 0x9E3779B9 (defconstant +delta+ #x9E3779B9) > (defun floorn (n) (nth-value 0 (floor n))) is above used? > (defun >> (val num-bytes) > "Right-shift positive integer val by num-bytes" > (let* (t1 t2) > (setf t1 (expt 2 num-bytes)) > (setf t2 (/ val t1)) > (floor t2))) (defun >> (val num-bytes) "Right-shift positive integer val by num-bytes" (floor (/ val (expt 2 num-bytes)))) > (defun transform (v1 v2 v3 v4) > (let (t1 t2 t3) > (setf t1 (<<4 v1)) > (setf t2 (expt v2 v1)) > (setf t3 (expt v3 (>> v2 5))) > (+ t1 t2 t3 v4))) > (defun transform (v1 v2 v3 v4) (+ (<<4 v1) (expt v2 v1) (expt v3 (>> v2 5)) v4)) and so on... -- http://mail.python.org/mailman/listinfo/python-list