Функциональные языки требуют устранения изменяемого состояния, которое видимо на уровне абстракции языка. Поэтому данные, которые были бы видоизменены на месте императивным языком, должны быть скопированы вместо этого, с мутацией, происходящей на копии. Для простого примера посмотрите быструю сортировку в Haskell по сравнению с C.
, Кроме того, сборка "мусора" требуется, потому что free()
не чистая функция, поскольку она имеет побочные эффекты. Поэтому единственный путь к свободной памяти, которая не включает побочные эффекты на уровне абстракции языка, со сборкой "мусора".
, Конечно, в принципе, достаточно умный компилятор мог оптимизировать большую часть этого копирования. Это уже сделано до некоторой степени, но создание компилятора, достаточно умного для понимания семантики кода на том уровне, просто трудно.
Simple:
CultureInfo ci = CultureInfo.GetCultureInfo ("nl-nl");
if( ci.IsNeutralCulture )
{
Console.WriteLine (ci.EnglishName);
Console.WriteLine (ci.NativeName);
}
else
{
Console.WriteLine (ci.Parent.EnglishName);
Console.WriteLine (ci.Parent.NativeName);
}
CultureInfo object contains property called Parent - if it's set then then there is CultureInfo with desired EnglishName = Dutch
Вы можете использовать объект HTTP_ACCEPT_LANGUAGE.