Salı, Ocak 03, 2006

Değerlerin yerini değiştirme

Özellikle sıralama vb. algoritmalarında iki değerin yerini değiştirmemiz sıklıkla gerekir. Mesela;
int a = 1;
int b = 2;
int gecici;


gecici = a;
a = b;
b = gecici;

örneğinde olduğu gibi. Ama Ruby kullanıyorsak ne yapıyoruz;
a, b = b, a
Çok hızlı geldiyse yavaş çekimde bir daha seyredin ;-)

8 yorum:

herhangibiri dedi ki...

Ben bunu biryerden gormustum ama...
hmm, python'du galiba :)

Bir de su var:
(let ((x y) (y x)) ...)

Nedense ruby sozdizimi benim hic hosuma gitmedi. Birkac defa tutorial'larina basladim, ama bitiremeden sıkılıp biraktim. Ya sozdiziminde tutarsizliklar var, ya da duzenini benim aklim almiyor.

Mesela bloklar lambda ifadeleri mi? Fonksiyona yolladigimiz bir blok bir cesit parametre mi? Oyleyse bir fonksiyon neden sadece bir tane blok parametresi alabiliyor, veya niye normal parametreler parantez icinde yaziliyor da bloklar ayri yaziliyor? Falan filan...

Adsız dedi ki...

bir de bu var:
x ^= y;
y ^= x;
x ^= y;

:)

Nightwalker dedi ki...

Mesela bloklar lambda ifadeleri mi? Fonksiyona yolladigimiz bir blok bir cesit parametre mi? Oyleyse bir fonksiyon neden sadece bir tane blok parametresi alabiliyor, veya niye normal parametreler parantez icinde yaziliyor da bloklar ayri yaziliyor? Falan filan...

Walla sorularınız çok net değil. Kod bazında sorarsanız daha iyi yardımcı olabilirim.

Bir diğer nokta normal parametrelerde parantez içinde yazılmak zorunda değil.

Sundance dedi ki...

Perl'de de yaklaşık yirmi yıldır
($a,$b)=($b,$a);

yapıyoruz ;)

Nightwalker dedi ki...

($a,$b)=($b,$a);

Yaşım pek müsait değil 20 yıl öcesinin kodlarını bilmeye :) Ama Ruby perl ün pek çok olumlu özelliğinden faydalanmış bir dildir. Yinede alt alta yazınca

($a,$b)=($b,$a);
a,b = b,a

Ruby de görüntü biraz daha net bence :)

afsina dedi ki...

acikcasi.. begenmedim ruby'nin yazimini. a,b=b,a (bosluklarin onemi varmi bilmeiyorum) seklinde bir yazim fazladan yeni yazim kurallarin ogrenilmesini gerektiriyor.
daha acik ama uzun yazimi tercih ederim. varsin uc satirda yapilsin.
Eger bu islem sIklikla kullaniliyorsa swap(int a, int b) seklinde bir metod-fonksiyon yazilabilir.

Nightwalker dedi ki...

Sanırım bu biraz alışkanlık meselesi. Ruby açık kodlu bir sistem söz konusu fonksiyonu tanımlayıp kulanmamanıza (tiacri uygulamalar da dahil ;) ) hiç bir engel yok...

Adsız dedi ki...

Bence de hiç iç açıcı ve doğal değil notasyon.

Biz Tupol 2'de şöyle yapmıştık:

a <=> b

nasıl?



Not: (Basit bir sort algoritması için Tupol kodu)
Sirala();
Tanim
Sayi tn,ai,aj,temp,d;
Tanimsonu
Basla
tn <= n-1;
Dongu ai <= 1 >> tn artir
Blok
temp <= ai + 1;
d <= ai;
Dongu aj <= temp >> n artir
Blok
Eger A[aj] < A[d] ise
Blok
Esit d <= aj;
Bloksonu;
Bloksonu
A[ai] <=> A[d]
i <=ai;
j <=d;
Bloksonu
Bitir