March 21, 2014

iota nedir abi? insan suna daha guzel bir isim bulamaz mi?

allah tas etsin bu ismi vereni diyecegim. ben su metoda ilk baktigimda mumkun degil verilen aralikta bir range urettigini anlamam. incelemem gerek ciktisini. insan derki range(1, 10) ya da ne bileyim 1.upto(10) ya da 10.downto(1).

ben bunu http://linux.die.net/man/3/inet_ntoa sununla karistiriyorum arkadas hep. kardesi de bu: http://linux.die.net/man/3/inet_aton

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 21, 2014

Alıntı (acehreli):

>

Tamamen haklısın. :) Tartışmaları olmuştu. O ismi Andrei'nin bulduğunu sanıyorum. En azından karşı çıkmıyor. Uzun bir konunun ortasından bir alıntı:

Alıntı:

>

I don't find the name "iota" stupid.

http://forum.dlang.org/thread/iit0os$1nhe$1@digitalmars.com?page=4#post-ij1nkf:24i7g:242:40digitalmars.com

Ali

konuyu mahvettim ozur diliyorum.

ufcs kullanaraktan:

auto upto(int from, int to) {
 return iota(from, to);
}

auto downto(int from, int to) {
 return iota(to, from).array.reverse;
}

void main(string args[]) {
 writeln(1.upto(10).filter!(i => i % 2 == 0));
 writeln(10.downto(1).map!(i => i * 2));
}

boylesi benim icin daha zevkli. andrei iota'nin acilimini bir kendi biliyor galiba? :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 21, 2014

Tamamen haklısın. :) Tartışmaları olmuştu. O ismi Andrei'nin bulduğunu sanıyorum. En azından karşı çıkmıyor. Uzun bir konunun ortasından bir alıntı:

Alıntı:

>

I don't find the name "iota" stupid.

http://forum.dlang.org/thread/iit0os$1nhe$1@digitalmars.com?page=4#post-ij1nkf:24i7g:242:40digitalmars.com

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 21, 2014

upto ve downto kabul! :)

Ben de aşağıdaki programda artanAzalan ve azalanArtan diye iki işlev yazdım. Böylece boşlukların 2, 1, 0, 1, 2 diye önce azalan ve sonra artan genişliklerini ve yıldızların 1, 3, 5, 3, 1 diye önce artan ve sonra azalan genişliklerini ifade edebiliriz.

Bu iki genişlik dizisini zip ile birleştirdiğimizde de çokuzlu sayı dizileri elde etmiş oluruz. Örneğin, genişliği 5 olan baklava dilimi için:

   writefln("%(%s\n%)", zip(azalanArtan(0, 2, 1),
                            artanAzalan(1, 5, 2)));

Çokuzluların birinci elemanları boşluk genişliğini, ikinci elemanları da yıldız genişliğini veriyor:
'
Tuple!(int, int)(2, 1)
Tuple!(int, int)(1, 3)
Tuple!(int, int)(0, 5)
Tuple!(int, int)(1, 3)
Tuple!(int, int)(2, 1)
'
Şimdi o çokuzluları boşluk ve yıldız karakterleri üreten bir map'e verirsek bu işi daha farklı ama yine temiz bir biçimde halletmiş oluyoruz:

import std.range;
import std.algorithm;
import std.conv;
import std.string;
import std.exception;
import std.stdio;
import std.traits;

/* Küçük değerden büyük değere doğru artan ve sonra tekrar küçük değere doğru
* azalan değerler üretir. */
auto artanAzalan(T)(T küçük, T büyük, T adım = 1)
   if (isSigned!T)
{
   return chain(iota(küçük, büyük, adım),
                iota(büyük, küçük - 1, -adım));
}

unittest
{
   assert(artanAzalan(1, 7, 2).equal([ 1, 3, 5, 7, 5, 3, 1 ]));
}

/* Büyük değerden küçük değere doğru azalan ve sonra tekrar büyük değere doğru
* artan değerler üretir. */
auto azalanArtan(T)(T küçük, T büyük, T adım = 1)
   if (isSigned!T)
{
   return chain(iota(büyük, küçük, -adım),
                iota(küçük, büyük + 1, adım));
}

unittest
{
   assert(azalanArtan(10, 20, 5).equal([ 20, 15, 10, 15, 20 ]));
}

auto baklavaDilimi(size_t N)
{
   enforce(N % 2, format("Baklava dilimi genişliği çift olamaz. (%s)", N));

   return zip(azalanArtan(0, N.to!int / 2, 1),
              artanAzalan(1, N.to!int, 2))

          .map!(genişlikler => chain(' '.repeat(genişlikler[0]),
                                     '*'.repeat(genişlikler[1])));
}

void main()
{
   writefln("%(%s\n%)", baklavaDilimi(9));
}

Bu kodu daha çok beğeniyorum çünkü .text ile hevesli dizgi üretimi yok ve .center ile satır sonundaki boşlukları bulunmuyor. (İstendiğinde sona da boşluk eklenebilir.) Dolayısıyla, sonuçtaki aralığın elemanları artık dizgi olmadıklarından, en sondaki düzen dizgisinde "%-(" kullanmak da gerekmedi.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2
Next ›   Last »