ОК, у вас есть тип изменяемой очереди.
Идиоматический способ обработки списка императивно - List.iter
.
Мне кажется, что вы планируете написать свою собственную рекурсивную функцию loop
, чтобы сделать это вместо этого (возможно, потому, что это домашнее задание). Первое замечание состоит в том, что при написании императивного кода, подобного этому, идиоматической задачей является возвращение ()
(единственное значение типа unit
), а не None
. Ваша функция loop
всегда будет возвращать ()
, потому что она работает, изменяя очередь (императивно).
вопросы вы должны ответить на рекурсии (как я всегда указывают) являются:
Что вам нужно сделать для пустого списка?
Если список не пуст, что вам нужно делать с его головой и хвостом?
На вопрос об этом ответе кажется довольно очевидным. Но если нет, возможно, намек на то, что вы хотите назвать две функции, о которых вы уже знаете, одну для головы и одну для хвоста списка.
Здесь недостаточно информации, чтобы ответить разумно. Как выглядит ваш тип очереди? Какие функции доступны для управления очередями? –
type 'a qnode = {v:' a; mutable next: 'a qnode option} type' a queue = {mutable head: 'опция qnode; mutable tail: 'a qnode option} – user1679089
и мои функции: – user1679089