Я пытаюсь следовать примерам, приведенным в различных местах для приложений D. Обычно, когда я изучаю язык, я запускаю примеры приложений и изменяю их сам, просто для того, чтобы протестировать материал.
Одно приложение, которое привлекло мое внимание, заключалось в подсчете частоты слов в переданном блоке текста. Поскольку словарь был построен в ассоциативном массиве (с элементами, хранящими частоту, а ключами были сами слова) , вывод был не в каком-то определенном порядке. Итак, я попытался отсортировать массив на основе примеров, приведенных на сайте.
Во всяком случае, пример показал лямбду 'sort! (...) (array);' но когда я попробую код, dmd не скомпилирует его.
Вот код, приведенный ниже:
import std.stdio;
import std.string;
void main() {
uint[string] freqs;
freqs["the"] = 51;
freqs["programming"] = 3;
freqs["hello"] = 10;
freqs["world"] = 10;
/*...You get the point...*/
//This is the actual example given, but it doesn't
//seem to work, old D version???
//string[] words = array(freqs.keys);
//This seemed to work
string[] words = freqs.keys;
//Example given for how to sort the 'words' array based on
//external criteria (i.e. the frequency of the words from
//another array). This is the line where the compilor craps out!
sort!((a,b) {return freqs[a] < freqs[b];})(words);
//Should output in frequency order now!
foreach(word; words) {
writefln("%s -> %s", word, freqs[word]);
}
}
Когда я пытаюсь скомпилировать этот код, я получаю следующее
s1.d(24): Error: undefined identifier sort
s1.d(24): Error: function expected before (), not sort of type int
Может кто-нибудь сказать мне, что мне нужно делать здесь?
Я использую DMD v2.031, я пытался установить gdc, но кажется, что он поддерживает только языковую спецификацию v1. Я только начал смотреть на DIL, поэтому я не могу комментировать, поддерживает ли это код выше.