;; binary position
(defun pos (item list pos-list)
(if (not (null list))
(if (= item (car list))
(pos item (cdr list) (cons 1 pos-list))
(pos item (cdr list) (cons 0 pos-list)))
(reverse pos-list)))
;; cumulative position
(defun bin2cum (pos cum-pos cum)
(if (not (null pos))
(if (= 0 (car pos))
(bin2cum (cdr pos) cum-pos (+ cum 1))
(bin2cum (cdr pos) (cons cum cum-pos) (+ cum 1)))
(reverse cum-pos)))
[112]> (pos 4 '(3 4 1 0 1 7 8 9 11 4 12 1 6) NIL)
(0 1 0 0 0 0 0 0 0 1 0 0 0)
[113]> (bin2cum (pos 4 '(3 4 1 0 1 7 8 9 11 4 12 1 6) NIL) NIL 0)
(1 9)
On Thu, 24 Apr 2008 09:30:10 +0300, Volkan YAZICI <[EMAIL PROTECTED]> wrote:
> On Wed, 23 Apr 2008, Aykut Caglayan <[EMAIL PROTECTED]> writes:
>> Ornegin soyle bir listem var:>'(0 1 1 0 0 1 1)
>> ve ben su cevabi ariyorum:> '(1 2 5 6)
>
> CL-USER> (defun positions (item list)
> "POSITION derivate returns list of positions of the
> supplied ITEM occuring in the specified LIST."
> (labels ((collect-positions (position accum list)
> (cond
> ((endp list) accum)
> ((eql item (first list))
> (collect-positions (1+ position)
> (cons position accum)
> (rest list)))
> (t (collect-positions (1+ position) accum (rest
> list))))))
> (nreverse (collect-positions 0 nil list))))
> STYLE-WARNING: redefining POSITIONS in DEFUN
> POSITIONS
> CL-USER> (positions 1 '(0 1 1 0 0 1 1))
> (1 2 5 6)
>
> Ağız tadınıza uygun olarak KEY ve TEST seçeneklerini de -- POSITION
> işlevinde olduğu gibi -- POSITIONS'a da ekleyebilirsiniz.
>
>
> İyi çalışmalar.
>
> _______________________________________________
> cs-lisp mailing list
> [email protected]
> http://church.cs.bilgi.edu.tr/lcg
> http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp
_______________________________________________
cs-lisp mailing list
[email protected]
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp