1
Name:
Anonymous
2011-01-13 4:09
Hai, I'm a newfag to C++ and to this board so excuse my giant amount of fail.
Why won't this figure out the smallest thing in the array?
http://codepad.org/vaHOX8mW
42
Name:
Anonymous
2011-01-13 16:33
Let's post some Lisp macro hackery:
;; simple range macro,
;; builds a list at compile-time when possible.
(define-syntax (range stx)
(define gen
(λ (x y s)
(let-values (((compare +/-)
(if (< x y) (values > +)
(values < -))))
(let loop ((x x)
(r '()))
(if (compare x y) (reverse r)
(loop (+/- x s)
(cons x r)))))))
(syntax-case stx ()
((~ n m s) (let ((n1 (syntax->datum #'n))
(m1 (syntax->datum #'m))
(s1 (syntax->datum #'s)))
(cond ((and (number? n1)
(number? m1)
(number? s1)) #`'#,(gen n1 m1 s1))
(else #`(#,gen n m s)))))
((~ n m) #'(~ n m 1))
((~ m) (let ((m1 (syntax->datum #'m)))
(if (number? m1) #`'#,(gen 0 (sub1 m1) 1)
#`(#,gen 0 (sub1 m) 1))))))
(range 1 10) ; => '(1 2 3 4 5 6 7 8 9 10), built at compile-time
(let ((x 10))
(range 1 x)) ; same, but at run-time
(range 1 (+ 9 1)) ; run-time, I'm working on this
(range 10) ; => '(0 1 2 3 4 5 6 7 8 9), builds a list of ten ELEMENTS
(range 1 5 0.5) ; => (0 0.5 ... 4.5 5)