September 02, 2009

Tam Andrei Alexandrescu'nun std.algorithm (http://www.digitalmars.com/d/2.0/phobos/std_algorithm.html) yazısını çevirmeye başlıyordum ki dakika bir gol 1 hata aldım :)

import std.cstream;
import std.stdio;
import std.algorithm;
import std.range;


void main ()
{
   int[] dizi1 = [ 1, 2, 3, 4 ];
   int[] dizi2 = [ 5, 6 ];
   auto kareler = map! ("a * a") (chain (dizi1, dizi2));
   assert(equal(kareler, [ 1, 4, 9, 16, 25, 36 ])); // <= bu kısımda derleyici hata veriyor
}

Tam map işlevi işini yapıp assert'le yeni oluşturulan dizinin içine elemanları gerçekten istediğimiz gibi yerleştirip yerleştirmediğini kıyaslayacağı sırada hata veriyor. Aldığım hata mesajı şu şekilde:

Alıntı:

>

merhaba.d(14): Error: template std.algorithm.equal(alias pred = "a == b",Range1,Range2) if (isInputRange!(Range1) && isInputRange!(Range2) && is(typeof(binaryFun!(pred)(Range1.init.front,Range2.init.front)))) does not match any function template declaration
merhaba.d(14): Error: template std.algorithm.equal(alias pred = "a == b",Range1,Range2) if (isInputRange!(Range1) && isInputRange!(Range2) && is(typeof(binaryFun!(pred)(Range1.init.front,Range2.init.front)))) cannot deduce template function from argument types !()(Map!(result,ChainImpl!(int[],int[])),int[6u])

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

September 02, 2009

dmd2 ile gelen algorithm.d'yi açtım ve olayı equal'un unittest bölümünden öğrendim:

[ 1, 4, 9, 16, 25, 36 ][]

Herhalde sonundaki '[]', bütün aralık anlamına geliyor.

Ali

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