我试图将这段c ++代码翻译成haskell但不能真正理解它.这取自http://cs.stanford.edu/people/eroberts/courses/cs106b/chapters/07-backtracking-algorithms.pdf中的nim.cpp .
C++:
const int MAX_MOVE = 3;
const int NO_GOOD_MOVE = -1;
int FindGoodMove(int nCoins) {
for (int nTaken = 1; nTaken <= MAX_MOVE; nTaken++) {
if (IsBadPosition(nCoins - nTaken)) return nTaken;
}
return NO_GOOD_MOVE;
}
bool IsBadPosition(int nCoins) {
if (nCoins == 1) return true;
return FindGoodMove(nCoins) == NO_GOOD_MOVE;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我在haskell做了:
findGoodMove nCoins = if isBadPosition (nCoins - nTaken) == True
then nTaken
else -1
where nTaken = 1
isBadPosition nCoins = if nCoins == …Run Code Online (Sandbox Code Playgroud)