Thread overview | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
October 10, 2011 problems with DPL example. | ||||
---|---|---|---|---|
| ||||
Hello. I'm having problems compiling the following: // From chapter 1 of D Programming Language. // import std.stdio, std.string; void main() { uint[string] dictionary; foreach( line; stdin.byLine()) { // Break sentence into words // Add each word in the sentence to the vocabulary foreach( word; splitter(strip(line))) { if( word in dictionary) continue; // Nothing to do. auto newID = dictionary.length; dictionary[word] = newID; writeln( newid, '\t', word); } } return; } $ dmd wordcount.d wordcount.d(9): Error: undefined identifier splitter $ dmd -v DMD32 D Compiler v2.055 Copyright (c) 1999-2011 by Digital Mars written by Walter Bright Documentation: http://www.digitalmars.com/d/2.0/index.html I am doing the examples in cygwin. Anyone know what the problem is? thanks. |
October 10, 2011 Re: problems with DPL example. | ||||
---|---|---|---|---|
| ||||
Posted in reply to %u | On 10.10.2011 19:55, %u wrote: > Hello. I'm having problems compiling the following: > > // From chapter 1 of D Programming Language. > // > import std.stdio, std.string; > > void main() { > uint[string] dictionary; > > foreach( line; stdin.byLine()) { > // Break sentence into words > // Add each word in the sentence to the vocabulary > foreach( word; splitter(strip(line))) { > if( word in dictionary) continue; // Nothing to do. > auto newID = dictionary.length; > dictionary[word] = newID; > writeln( newid, '\t', word); > } > } > return; > } > > > > $ dmd wordcount.d > wordcount.d(9): Error: undefined identifier splitter > > > > $ dmd -v > DMD32 D Compiler v2.055 > Copyright (c) 1999-2011 by Digital Mars written by Walter Bright > Documentation: http://www.digitalmars.com/d/2.0/index.html > > > I am doing the examples in cygwin. > > Anyone know what the problem is? > > > thanks. > > Seems some functionality was moved in 2.052. From std.string documentation: "IMPORTANT NOTE: Beginning with version 2.052, the following symbols have been generalized beyond strings and moved to different modules." And "split Use std.array.split instead" std.array includes both split and splitter. http://www.d-programming-language.org/phobos/std_array.html#split |
October 10, 2011 Re: problems with DPL example. | ||||
---|---|---|---|---|
| ||||
Posted in reply to simendsjo | == Quote from simendsjo (simendsjo@gmail.com)'s article > Seems some functionality was moved in 2.052. From std.string documentation: > "IMPORTANT NOTE: Beginning with version 2.052, the following symbols > have been generalized beyond strings and moved to different modules." > And > "split Use std.array.split instead" > std.array includes both split and splitter. > http://www.d-programming-language.org/phobos/std_array.html#split Okay, thanks for that. I added the extra module, and found I made a typo. So I corrected that too. Anyways, I am now having another problem. What can I do to fix it? : import std.stdio, std.string, std.array; void main() { uint[string] dictionary; foreach( line; stdin.byLine()) { // Break sentence into words // Add each word in the sentence to the vocabulary foreach( word; splitter(strip(line))) { if( word in dictionary) continue; // Nothing to do. auto newID = dictionary.length; dictionary[word] = newID; writeln( newID, '\t', word); } } return; } $ dmd wordcount.d wordcount.d(12): Error: associative arrays can only be assigned values with immutable keys, not char[] $ dmd -v DMD32 D Compiler v2.055 Copyright (c) 1999-2011 by Digital Mars written by Walter Bright Documentation: http://www.digitalmars.com/d/2.0/index.html Usage: thanks! |
October 10, 2011 Re: problems with DPL example. | ||||
---|---|---|---|---|
| ||||
Posted in reply to %u | You need to create an immutable copy of word before using it as a key. That is, replace this line:
> dictionary[word] = newID;
with
dictionary[word.idup] = newID;
|
October 10, 2011 Re: problems with DPL example. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Justin Whear | Thanks. It works, but I get something weird in the output. I get the problem if I run it in a dos prompt or in a cygwin prompt: Microsoft Windows [Version 6.1.7600] Copyright (c) 2009 Microsoft Corporation. All rights reserved. D>echo hello | wordcount2.exe 0 hello std.stdio.StdioException@std\stdio.d(2156): Bad file descriptor ---------------- 42A910 42A787 40318A 40239C 402141 403798 4037D7 4033D3 465D71 ---------------- Do you know what this is caused by? thanks. Here's the code again: import std.stdio, std.string, std.array; void main() { uint[string] dictionary; foreach( line; stdin.byLine()) { // Break sentence into words // Add each word in the sentence to the vocabulary foreach( word; splitter(strip(line))) { if( word in dictionary) continue; // Nothing to do. auto newID = dictionary.length; dictionary[word.idup] = newID; writeln( newID, '\t', word); } } return; } thanks. |
October 10, 2011 Re: problems with DPL example. | ||||
---|---|---|---|---|
| ||||
Posted in reply to %u | %u:
> D>echo hello | wordcount2.exe < wordcount2.d
> 0 hello
> std.stdio.StdioException@std\stdio.d(2156): Bad file descriptor
Try:
wordcount2.exe < wordcount2.d
Bye,
bearophile
|
October 10, 2011 Re: problems with DPL example. | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 10.10.2011 21:38, bearophile wrote:
> %u:
>
>> D>echo hello | wordcount2.exe< wordcount2.d
>> 0 hello
>> std.stdio.StdioException@std\stdio.d(2156): Bad file descriptor
>
> Try:
>
> wordcount2.exe< wordcount2.d
>
> Bye,
> bearophile
Shouldn't the original way work too?
Another point: I recommend compiling with debug symbols as it gives you a nice stacktrace.
|
October 10, 2011 Re: problems with DPL example. | ||||
---|---|---|---|---|
| ||||
Posted in reply to simendsjo | simendsjo: > Shouldn't the original way work too? I don't remember. > Another point: I recommend compiling with debug symbols as it gives you a nice stacktrace. I think debug symbols should be present on default, to produce a nice stack trace on default, and be disabled with a compiler switch :-) Bye, bearophile |
October 10, 2011 Re: problems with DPL example. | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | == Quote from bearophile (bearophileHUGS@lycos.com)'s article > simendsjo: > > Shouldn't the original way work too? > I don't remember. > > Another point: I recommend compiling with debug symbols as it gives you > > a nice stacktrace. > I think debug symbols should be present on default, to produce a nice stack trace on default, and be disabled with a compiler switch :-) > Bye, > bearophile If I use file indirection instead of piping output to the d program, it works in cygwin window. I'm not a dos expert, so I don't know how to do the same test on windows. anyways, thanks! |
October 10, 2011 Re: problems with DPL example. | ||||
---|---|---|---|---|
| ||||
Posted in reply to %u | You should checkout out this page: http://erdani.com/tdpl/errata/ - Jonathan M Davis |
Copyright © 1999-2021 by the D Language Foundation