On Wednesday, 22 January 2020 at 14:23:53 UTC, Paul Backus wrote:
On Wednesday, 22 January 2020 at 10:49:07 UTC, mark wrote:
Regarding generate(): allWords should never be changed
(generate is called in a loop with the same allWords every
time) -- so should it be `in WordSet allWords`?
For parameters that shouldn't be changed, use const. So it
should be `const WordSet allWords`.
That single change produces (using LDC 1.19.0 - D 2.089.1):
./wordladder.d(52): Error: function wordladder.update(string[]
ladder, int[string] words, const(int[string]) compatibles) is not
callable using argument types (string[], const(int)[string],
const(int)[string])
./wordladder.d(52): cannot pass argument words of type
const(int)[string] to parameter int[string] words
Failed: ["/home/mark/opt/ldc2-1.19.0-linux-x86_64/bin/ldmd2",
"-v", "-o-", "./wordladder.d", "-I."]
So I've rolled it back.
Regarding update(): ladder and words are both modified in
update -- so should they be `ref WordList ladder` and `ref
WordSet words`? And if so, do I need to change the update()
call in the generate() function?
Yes, they should be `ref`. No, you do not have to change the
update() call.
I've done this but my impression from the docs is that passing
slices and associative arrays is already done by reference so
these aren't needed? (I can't tell yet because I haven't written
the modifying code.)
compatibles is (will be) modified in generate() but not in
update(), so should it be `in WordSet compatibles`?
It should be `const WordSet compatibles`.
Done that and it compiles fine.
Thanks.