---- Mehmet Yavuz Selim Soyturk <[EMAIL PROTECTED]> demiş ki: 
> Problemi problemi scheme ile cozmeye calistim. Biraz sac bas yoldum,
> ama sonra soyle birsey ortaya cikti:
> 
> (define (comb liste)
>   (let comb-help ((lst liste) (builded '(()) ))
>     (if (null? lst) builded
>         (comb-help (cdr lst)
>                    (append builded
>                            (map (lambda (x)
>                                   (cons (car lst) x))
>                                 builded))))))
> 
> 
> Sonra diger kodlarla karsilastiridm. Forcer'in koduna benziyor, fakat
> accumulator teknigini kullanarak tail-recursive olmasini sagladim.
> Biraz daha hizli olacagini tahmin ediyorum.

Ben böyle yaptığım zaman #scheme kanalında hala C gibi düşünüp, Lisp ile 
yazdığımı söylüyorlar. (Olması gereken Lisp gibi düşünüp, Lisp ile yazmakmış.) 
Imperative yaza yaza, alışkanlık genlerime işlemiş.

Benden de Bülent Bey'in önerisi için bir Scheme parçası:

(define (filter-using-bits bits s)
  (cond ((or (null? bits) (null? s)) '())
        ((eq? (car bits) 1) (cons (car s)
                                  (filter-using-bits (cdr bits) (cdr s))))
        (else (filter-using-bits (cdr bits) (cdr s)))))

(define (pow-of-2 u)
  (arithmetic-shift 2 (- u 1)))

(define (to-base num base)
  (if (< num base) (list num)
      (append (to-base (arithmetic-shift num -1) base)
              (list (modulo num base)))))
(define (to-bits num) (to-base num 2))

(define (combinations lst)
  (let ((maxnum (pow-of-2 (length lst))))
    (let loop ((num 1))
      (if (>= num maxnum) '()
          (cons (filter-using-bits (to-bits num) lst)
                (loop (+ num 2)))))))

to-base tanımlamasında append yerine cons kullanmak başarımı biraz daha 
arttırabilir sanırım.

> Ayni kodun haskell karsiligi:
> 
> comb lst = comb' lst [[]]
>   where comb' [] builded = builded
>         comb' (x:xs) builded = comb' xs (builded ++ (map (x:) builded))

Sanırım listede ne Common Lisp, ne de Haskell bilmeyen bir ben varım. :-)


İ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

Cevap