Re: [cs-lisp] nerde kalmistik.?

2008-02-07 Başlik Mehmet Yavuz Selim Soyturk
On Feb 7, 2008 9:28 PM, Utku Somer <[EMAIL PROTECTED]> wrote:
> sanirim
>
> (generate rules-list axiom-list)
>
> tadinda bir sey istiyordun. yani kurallar listesi verilecek, baslangic
> liste verilecek, sonraki nesili cikaracak. tabii bunu yazarken
> kurallar listesi icindeki (burdaki grammer'in turkcesi?) butun
> kurallari taramak ve o anda gerekeni bulmak lazim gerekecek. h.
>
> Hmm, ben ilk verilen ornegi pek sevemedim. arkadas kurallari string
> olarak vermis, ve sonucta yaptigi sey de yine pattern matching ve
> string replace. Ben L-sistemi uc boyutlu olarak kullanip agaclar
> cizmistim vakti zamaninda ve stringler ile tutmustum. hic tavsiye
> etmiyorum, cok yer tutuyor, bir sekilde stream sistemi kurmak cok daha
> iyi olabilir.

Aslinda yukarida bir semboller listesi kullanilmis. Sembollerin fazla
yer tutan seyler olduklarini sanmiyorum. Bence buyuk bir ihtimalle
hafizadaki bir string'e (veya benzer bir yapiya) pointer'dirlar ve
ayni semboller icin yeni hafiza ayrilmiyordur.


> demek istedigim su:
>
> (defun l ()
>   `(,#'l))
>
> (defun r ()
>   `(,#'r))
>
> ;90 derecelik koch egrisi ornegimiz olsun
> (defun f ()
>   `(,#'f ,#'l ,#'f ,#'r ,#'f ,#'r ,#'f ,#'l ,#'f))
>
>
> (defun grow (fractal)
>   (if (null fractal)
>   ()
>   (append (funcall (car fractal)) (grow (cdr fractal)
>
> generasyon isini boylece halletmis oldum. cizim isi icin daha fazla
> sorun mu yarattim? bu da benim sorum olsun. :)

Ben yine de sembollerle calisilmasini oneririm. Yukaridaki ornekte
veri kurallara siki sikiya bagli, pek esnek degil. Soyle birsey
yapilabilir:

(defvar *rules* (make-hash-table))
(setf (gethash 'F *rules*) '(F L F R F R F L))

(defun get-replacement (old)
  (gethash old *rules* (list old)))

(defun grow (fractal)
  (let ((new-fractal '()))
(dolist (old fractal (nreverse new-fractal))
  (dolist (new (get-replacement old))
(push new new-fractal)


(defun deneme ()
  (format t "~{~a ~}~%" (grow (grow '(F
  (let ((*rules* (make-hash-table)))   ; *rules*'a yeni deger verebiliyoruz
(setf (gethash 'F *rules*) '(A F B F))
(format t "~{~a ~}~%" (grow (grow '(F))

-- 
Mehmet

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] core-server-installer

2007-10-11 Başlik Mehmet Yavuz Selim Soyturk
On 10/11/07, Evrim Ulu <[EMAIL PROTECTED]> wrote:

> (ubuntu'da sbcl paketini bulamadim bilen goren varsa beni aydinlatirsa
> sevinirim)

Ben feisty uzerinden bulabiliyorum: http://packages.ubuntu.com/feisty/devel/sbcl

-- 
Mehmet

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] Re: Bram Cohen'in İşe Alma Sorusu (Merhaba Liste)

2007-08-14 Başlik Mehmet Yavuz Selim Soyturk
On 8/14/07, Aycan iRiCAN <[EMAIL PROTECTED]> wrote:
> Alp Özmert yazmış:
> > Selam!
> >
> > Selem <[EMAIL PROTECTED]> yazmış:
> >
> >
> >> -- What is the exponent of the largest power of two whose base seven
> >> representation doesn't contain three zeros in a row?
> >>
> >
> > Hiç de optimal olmayan bir çözüm:
> >
> > (do ((i 1 (1- i)))
> >  ((not (search "000" (write-to-string (expt 2 i) :base 7)))
> >  i))
> >
> > Bu soru ile uğraşırken çözemediğim bir problem ile karşılaştım. Bu
> > betiği onbin değil de yüzbinden geri saydırınca tabii ki de zaman
> > alıyor. Ben de bir kaç kere bölüp nerelerde olduğuna bakmak istedim
> > ama beceremedim. (Bölüp değişkenlerin değerlerine işlev çağrılarına
> > falan bakabiliyorum ama i'nin değerini bulamadım.) Yardımcı
> > olabilecek olursa sevinirim.
> >
> > Saygılar,
> > Alp Özmert
> >
> http://hpaste.org/2240
>
> Acemi bir programcı olarak ben de aynı deneme yanılma çözümünü haskell
> ile denedim. İlginç bir problemmiş, üzerinde düşünmesi bile eğitici.
> Teşekkürler.
>
> Sevgiler...
> --
> aycan

Ben de sizin koddan yola cikarak ussun degil de exponent'in kendisinin
bulunmasini sagladim. En son 8833 buldu. Bu iletiyi gonderirken acik
unutmusum programi, bilgisayarin hafizasini doldurdu. Ayni programi
baska dilde (mesela C'de) yazsaydik boyle hafiza kullanilmazdi. Ya
hafizayi dogru kullanan Haskell programi yazmayi bilmiyorum, ya da
programi interpreter'dan calistirdigim icin bazi optimizasyonlar
yapilmiyor. Denemek icin programi derleyeyim dedim, fakat bu sefer de
monadlara takildim.

   main = map (putStrLn . show) setC
veya
   main = foldl1 (>>) $ map (putStrLn . show) setC

gibi seyler denedim, olmadi. En sonunda

   main = foldr1 (>>) $ map (putStrLn . show) setC

seklinde oldu. Ve evet, bu sekilde hafiza problemi yok :)


Haskell'de kod yazmak aslinda zevkli (fonksiyonlari manipule etmek
falan), yalniz okunakli kod yazmasi zor gibi (kendi kodumdan
bahsediyorum).

Bir de asagida tanimladigim parallel fonksiyonu gibi calisan standard
bir fonksiyon yok mu Haskell'de? Soyle bir baktim, bulamadim.

(Afedersiniz, yukaridaki yazi ugrastigim seyleri aninda buraya
yazdigim icin biraz karisik oldu sanirim, uzun zaman sonra Haskell'e
tekrar bakan birinin karsilastigi problemler olarak
degerlendirebilirsiniz).

module Main where

import Numeric
import Char
import List
import Data.List

parallel :: (x -> a, y -> b) -> (x, y) -> (a, b)
parallel (f, g) (x, y) = ((f x), (g y))

setA = iterate (parallel ((+1), (*2))) (0, 1)
setB = [ (x, showIntAtBase 7 (intToDigit) y "") | (x, y) <- setA]
setC = map fst $ filter (not . isInfixOf "000" . snd) setB

main = foldr1 (>>) $ map (putStrLn . show) setC

-- 
Mehmet
___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] Fonksiyon Gölgeleme

2007-02-28 Başlik Mehmet Yavuz Selim Soyturk

On 2/21/07, Volkan YAZICI <[EMAIL PROTECTED]> wrote:

Merhaba,

Bildiğim kadarı ile FLET lexical scope'ta geçerli oluyor. Şöyle ki:

(defun cons-test (p q)
  (cons p q))

(defun mapcar-test (proc lst)
  (if (null lst) '()
  (cons-test (funcall proc (first lst))
 (mapcar-test proc (rest lst)

(flet ((cons-test (p q) (cons 1 (cons p q
  (mapcar-test #'(lambda (p) (* p 2)) '(1 2 3 4)))
=> '(2 4 6 8)

MAPCAR-TEST, FLET tarafından tanıtılan CONS-TEST'i dikkate almadı. Bu
sebeple özellikle fonksiyonların dynamic scope'ta değerini nasıl
gölgeleyebileceğimizi sormuştum.


Eger degistirmis olsaydi bile cons-test cons'u kullandigi icin sonsuz
donguye girmis olacaktik. cons kullanmayan cons'un yerine gececek
herhangi bir fonksiyon yazmak da pek kolay degil. Ama lisp'de esas
cons'a ulasmanin da bir yontemi vardir mutlaka, o sekilde
yapilabilirdi.

--
Mehmet
___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] [Fwd: [cs-discuss] a hard to understand scheme program]

2007-01-17 Başlik Mehmet Yavuz Selim Soyturk

http://en.wikipedia.org/wiki/Lambda_calculus
http://en.wikipedia.org/wiki/Fixed_point_combinator


bir fonksiyonun fixed point combinator olmasi icin (fix f) == (f (fix
f)) olmasi lazim imis.

fix fonksiyonunu lambda calculus seklinde yazalim:

(\z.z z z z z z z z z z z z z z z z z z z z) (\P u t t i n g S c h e m
e t o W o r k ! . ! (\b . W o r k W o r k W o r k W o r k W o r k !
b))

veya (\P u t t i n g S c h e m e t o W o r k ! . ! (\b . W o r k W o r
k W o r k W o r k W o r k ! b)) ifadesine kisaca X dersek:

(\z.z z z z z z z z z z z z z z z z z z z z) X


yani (fix f) su oluyor:

(\z.z z z z z z z z z z z z z z z z z z z z) X f

== (beta)
X X X X X X X X X X X X X X X X X X X X f

== (ilk X'i tam yazalim)
(\P u t t i n g S c h e m e t o W o r k ! . ! (\b . W o r k W o r k W
o r k W o r k W o r k ! b)) X X X X X X X X X X X X X X X X X X X f

== (beta)
f (\b . X X X X X X X X X X X X X X X X X X X X f b)

== (eta)
f (X X X X X X X X X X X X X X X X X X X X f)

Buradan da (fix f) == (f (fix f)) cikiyor.

--
Mehmet

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] [Fwd: [cs-discuss] a hard to understand scheme program]

2007-01-16 Başlik Mehmet Yavuz Selim Soyturk

fix'in nasil calistigini anlamak guc, ama isminden fixpoint combinator
oldugu anlasiliyor. Bu yuzden

((fix (lambda (f)
  (lambda (n)
(if (zero? n)
1
(* n (f (- n 1))) 9)

yaklasik suna denk geliyor

(define f
  (lambda (n)
(if (zero? n)
1
(* n (f (- n 1))
(f 9)

yani 9! hesaplaniyor. Simdi fix'in niye fixpoint oldugunu bulmak gerek :)

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] Re: Eldeki Parala r ile İstenen Miktarı Yakalamak

2007-01-10 Başlik Mehmet Yavuz Selim Soyturk

On 1/11/07, Volkan YAZICI <[EMAIL PROTECTED]> wrote:

On Jan 11 12:18, Volkan YAZICI wrote:
> (define (available-changes amount coins)
>   (cond
>((= amount 0) '())
>((< amount 0) #f)
>(else
> (append-map
>  (lambda (coin)
>(let ((avails (available-changes (- amount coin) coins)))
>  (cond
>   ((not avails) '())
>   ((null? avails) (list coin))
>   (else
>(append-map
> (lambda (changes)
>   (list (cons coin changes)))
> avails)
>  coins

Sorun şu ki yukarıdaki kod neredeyse çalışıyormuş. Çok ufak bir
corner-case dışında. Onun için ufak bir düzeltme ile çalışan kod
aşağıda:

(define (available-changes amount coins)
  (cond
   ((= amount 0) #f)
   ((< amount 0) '())
   (else
(append-map
 (lambda (coin)
   (let ((avails (available-changes (- amount coin) coins)))
 (cond
  ((not avails) (list coin))
  ((null? avails) '())
  (else
   (append-map
(lambda (changes)
  (list (cons coin changes)))
avails)
 coins

Fakat para birimleri arasına 1 eklendiği zaman olasılık uzayı
inanılmaz şekilde artıyor ve program sonsuz bir d,Av(Bng,A|(Bye girmişcesine
benim yavaş makinemde neredeyse saatlerce ,Ag(Balışıyor. (Bunun ddışında
Guile'ın stack depth overflow noktasına gelip swap'ten yemeye
başladığını s,Av(Bylemiyorum bile.)

Şimdi sorumu yeniden soruyorum, bu işi daha optimize bir şekilde
yapmanın yolu var mıdır? Yani para birimi i,Ag(Binde 1 varken de algoritma
,Ag(Balışabilsin.


İyi çalışmalar.


Merhaba,

Su sekilde de olabilir (algoritmanin kalan kisminin ne yaptigini
cozemedim, ama boyle calisiyor).

(define (available-changes amount coins)
 (cond
  ((= amount 0) '(()) )  ; bu miktar hic para koymadan saglanabilir
  ((< amount 0) '() ); bu miktar saglanamaz
  (else
   (append-map
(lambda (coin)
  (let ((avails (available-changes (- amount coin) coins)))
 (append-map
  (lambda (changes)
(list (cons coin changes)))
  avails)))
coins


--
Mehmet
___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] CL ile Turkce sozcuk heceleme programi

2006-12-22 Başlik Mehmet Yavuz Selim Soyturk

yaklasik 6.5 kat daha hizli calisiyor, fakat
hatalari bulamiyor. Sizin kod gelistirmeye daha acik gorunuyor. Mesela


pardon, 3.5 olacakti


--
Mehmet

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] CL ile Turkce sozcuk heceleme programi

2006-12-22 Başlik Mehmet Yavuz Selim Soyturk

(defconstant +tests+
'(("cccvcc" . 5) ("cccvcv" . 4)
  ("cccvc" . 5) ("ccvccc" . 5)
  ("ccvccv" . 4) ("ccvcc" . 5)
  ("ccvcc" .  4) ("ccvcv" . 3)
  ("ccvc" . 4) ("ccvv" . 3)
  ("ccv" . 3) ("cvccc" .  4)
  ("cvccv" . 3) ("cvcc" .  4) ("cvcv" .  2)
  ("cvc" .  3)  ("cv" .  2) ("vccc" .  3)
  ("vccv" .  2) ("vcc" .  3) ("vcvc" .  1)
  ("vcv" .  1)  ("vc" . 2) ("v" . 1)))

Burada hash kullanilabilir.


(defun first-hyphen (word)
 "Determines the first hyphen of the given word due to the
hyphenation tests. Returns NIL if it cannot extract the first
hyphen of the word."
 (let ((cv-word (convert-to-cv word)))
   (dolist (test +tests+)
 (if (starts-with cv-word (car test))
  (return (subseq word 0 (cdr test)))

Once kelimenin tamamini cv sekline donusturulup sonra hece aransaydi
daha hizli olabilir?


Ben bu konuda daha once soyle bir yontem dusunmustum: pespese her iki
sesli harfin arasinda hece ayrimi olmali. Aradaki sessiz harflerin
sayisina göre ayrimi belirleriz.

Kod soyle (sizin bazi fonksiyonlarinizi kullaniyor):
(defun positions (str pred)
 (loop for i from 0
for elem across str
when (funcall pred elem) collect i))

(defun each-subseq (seq subseq-len)
 (let ((count (- (length seq) subseq-len)))
   (loop for i from 0 to count
  collect (subseq seq i (+ i subseq-len)

(defun bol (a b)
 (if (= (- b a) 2)
 (1+ a)
 (1+ (floor (+ a b) 2

(defun hyphenation-starts (str)
 (cons 0 (mapcar
   (lambda (x)
 (apply #'bol x))
   (each-subseq
(positions str #'vowel-p)
2

(defun hyphenate-2 (str)
 (let ((lst (append (hyphenation-starts str) (list (length str)
   (mapcar (lambda (x)
  (apply (lambda (a b) (subseq str a b))
 x))
(each-subseq lst 2


Bu kod sizinkinden yaklasik 6.5 kat daha hizli calisiyor, fakat
hatalari bulamiyor. Sizin kod gelistirmeye daha acik gorunuyor. Mesela
cv'nin yaninda yeni harf kategorileri tanimlayip daha ozellestirilmis
sekilde heceleme yapabilirsiniz.

--
Mehmet

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


[cs-lisp] Re: python lisp interpreter

2006-12-16 Başlik Mehmet Yavuz Selim Soyturk

Merhaba,

Kodu biraz degistirdim, en iyisi link vereyim.

http://studwww.ugent.be/~msoyturk/lisp.py

--
Mehmet

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


[cs-lisp] Re: python lisp interpreter

2006-12-16 Başlik Mehmet Yavuz Selim Soyturk

On 12/16/06, Mehmet Yavuz Selim Soyturk <[EMAIL PROTECTED]> wrote:

Merhaba,

http://paulgraham.com/rootsoflisp.html adresindeki dokuman yardimiyla
pythonda basit bir lisp yorumlayicisi yazdim. Kendisi ektedir.


Bu sefer gercekten ektedir :)

--
Mehmet
import string
import copy


##
#   TOKENIZING   #
##

def isGood(s):
lpar = 0
rpar = 0
n = 0
for (t,s) in list(tokenize(s)):
if t == '(':
lpar += 1
elif t == ')':
rpar += 1
if rpar > lpar:
return 'n' # no
n += 1
if rpar < lpar or n == 1:
return 'm' # more
else:
return 'y' # yes

def atomChar(c):
return not c in (string.whitespace + '()\'",`#@')

def whitespace(c):
return c in string.whitespace

def tokenize(s):
l = len(s)
i = 0
while i < l:
if whitespace(s[i]):
i += 1
continue

if s[i] in '()\',`#@':
yield (s[i], s[i])
i += 1
continue

if s[i] == '"':
token = '"'
i += 1
while s[i] != '"':
token += s[i]
i += 1
i += 1
yield ('s', token + '"')
continue

token = ''
while i < l and atomChar(s[i]):
token += s[i]
i += 1
if token != '':
yield ('a', token.upper())
else:
yield ('e', None) # error
yield ('$', None) # end



##
#   PARSING  #
##

def p_atom(tokens, i):
sort, token = tokens[i]
assert sort == 'a', sort
return (i+1, token)

def p_string(lst, tokens, i):
sort, token = tokens[i]
assert sort == 's', sort
return (i+1, token)

def p_lst(tokens, i):
if tokens[i][0] == '(':
i, lst = p_raw_list(tokens, i+1)
assert tokens[i][0] == ')', tokens[i][0]
return (i+1, lst)
else:
ops = {'\'':'QUOTE', ',':'COMMA', '@':'AT', '#':'SQUARE', '`':'BACKQUOTE'}
assert tokens[i][0] in '\'`,@#', tokens[i][0]
op = ops[tokens[i][0]]
i, expr = p_expr(tokens, i+1)
return (i, [op, expr])

def p_raw_list(tokens, i):
lst = []
while tokens[i][0] != ')':
i, expr = p_expr(tokens, i)
lst.append(expr)
return (i, lst)

def p_expr(tokens, i):
if tokens[i][0] in 'sa':
return (i+1, tokens[i][1])
else:
assert tokens[i][0] in '(\'`,@#', tokens[i][0]
i, lst = p_lst(tokens, i)
return (i, lst)

def parse(s):
tokens = list(tokenize(s))
i, expr = p_expr(tokens, 0)
assert tokens[i][0] == '$', tokens[i][0]
return expr

def unparse(x):
if type(x) == list:
return '(' + ' '.join(map(unparse, x)) + ')'
else:
return x


def doMap(x, mapp):
if type(x) != list and x in mapp:
return mapp[x]
else:
return x

def isNumber(x):
try:
a = float(str(x))
return True
except:
return False

def isInt(x):
try:
a = int(str(x))
return True
except:
return False


#--#
# EVALUATE EXPRESSI0N  #
#--#

def res(lst, mapp):
if isNumber(lst):
return lst
elif type(lst) != list:
return mapp[lst]

oper = lst[0]
if oper == 'QUOTE':
return lst[1]
elif oper == 'ATOM':
x = res(lst[1], mapp)
if type(x) != list or x == []:
return 'T'
else:
return []
elif oper == 'EQ':
x = res(lst[1], mapp)
y = res(lst[2], mapp)
if x == [] and y == []:
return 'T'
elif type(x) != list and type(y) != list and x == y:
return 'T'
else:
return []
elif oper == 'CAR':
x = res(lst[1], mapp)
return x[0]
elif oper == 'CDR':
x = res(lst[1], mapp)
return x[1:]
elif oper == 'CONS':
x = res(lst[1], mapp)
y = res(lst[2], mapp)
return [x] + y
elif oper == 'COND':
i = 1
while i < len(lst):
form = lst[i]
condition = res(form[0], mapp)
if condition != []:
return res(form[1], mapp)
i += 1
return []
return [x] + y
elif oper == 'DEFUN':
funName = lst[1]

[cs-lisp] python lisp interpreter

2006-12-16 Başlik Mehmet Yavuz Selim Soyturk

Merhaba,

http://paulgraham.com/rootsoflisp.html adresindeki dokuman yardimiyla
pythonda basit bir lisp yorumlayicisi yazdim. Kendisi ektedir. Basit
programlar yazilabiliyor, ama su kodu calistiramadim. graham'in eval
fonksiyonunda mi hata var yoksa bilmiyorum, kafam almiyor artik :)

(eval '(f '(b c)) '((f (lambda (x) (cons 'a x)


Selamlar.

--
Mehmet

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] Re: Rekürsif Kombinasyon Hesabı

2006-12-05 Başlik Mehmet Yavuz Selim Soyturk

Bu islemi tersten yapsak nasil olur?

Once uygun aralikta karesi farkli rakamlardan olusan tum sayilari
hesaplasak, ki cok az sayinin boyle olacagini dusunuyorum, sonra da bu
sayinin a+b+c+d saklinde yazilip yazilamayacagina baksak.

--
Mehmet

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] Kombinasyon Alımı

2006-07-23 Başlik Mehmet Yavuz Selim Soyturk

Forcer'in koduna benziyor, fakat
accumulator teknigini kullanarak tail-recursive olmasini sagladim.
Biraz daha hizli olacagini tahmin ediyorum.


Tabii optimizasyon az calisan bolumde oldugu icin pek de farketmiyor,
hatta benim kod nedense milisaniyeler kadar da olsa yavas olma
egiliminde.

--
Mehmet

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] Kombinasyon Alımı

2006-07-23 Başlik Mehmet Yavuz Selim Soyturk

Merhabalar.

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.

Ayni kodun haskell karsiligi:

comb lst = comb' lst [[]]
 where comb' [] builded = builded
   comb' (x:xs) builded = comb' xs (builded ++ (map (x:) builded))


--
Mehmet

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp