Вы бы многому не научились, если бы люди просто предоставили работающее решение, поэтому вместо этого я просто добавлю пару подсказок.
Ваша базовая стратегия определения рекурсивной функции countdownThenCountUp
хороша.Однако ваша функция принимает в качестве аргумента только number
, что недостаточно.Например, когда вы звоните:
countdownThenCountUp 2
Как функция узнает, должен ли он считать вверх или вниз?Для этого недостаточно информации!Итак, вам нужно изменить функцию, чтобы она имела дополнительный параметр.Вы можете сделать что-то вроде:
let rec countdownThenCountUp number goingDown =
// (...)
Если вы сделаете это, то логика в функции должна быть примерно равна:
- Если
number
больше нуля и goingDown
равно true
, затем обратный отсчет - Если
number
равен нулю, то вызовите рекурсивно с goingDown
, установленным на false
- Если
number
равно трем и goingDown
is false
затем остановите
Вы можете реализовать условия, используя сопоставление с образцом или if
- оба будут работать нормально.