2013-02-23 3 views
0

Как преобразовать список v1 :: v2 :: vn :: [] в очередь? Это все, что я написал до сих пор: -Преобразование списка в очередь

 let fromList (l:'a list) : 'a queue = 
     let queue = create() in 
     let rec loop (z: 'a list) (q: 'a queue) : 'a queue = 
      begin match z with 
      | [] -> None 
      | hd :: tl -> 
       end 

Спасибо!

+1

Здесь недостаточно информации, чтобы ответить разумно. Как выглядит ваш тип очереди? Какие функции доступны для управления очередями? –

+0

type 'a qnode = {v:' a; mutable next: 'a qnode option} type' a queue = {mutable head: 'опция qnode; mutable tail: 'a qnode option} – user1679089

+0

и мои функции: – user1679089

ответ

1

ОК, у вас есть тип изменяемой очереди.

Идиоматический способ обработки списка императивно - List.iter.

Мне кажется, что вы планируете написать свою собственную рекурсивную функцию loop, чтобы сделать это вместо этого (возможно, потому, что это домашнее задание). Первое замечание состоит в том, что при написании императивного кода, подобного этому, идиоматической задачей является возвращение () (единственное значение типа unit), а не None. Ваша функция loop всегда будет возвращать (), потому что она работает, изменяя очередь (императивно).

вопросы вы должны ответить на рекурсии (как я всегда указывают) являются:

  • Что вам нужно сделать для пустого списка?

  • Если список не пуст, что вам нужно делать с его головой и хвостом?

На вопрос об этом ответе кажется довольно очевидным. Но если нет, возможно, намек на то, что вы хотите назвать две функции, о которых вы уже знаете, одну для головы и одну для хвоста списка.

+1

Ницца. Я был слишком ленив, чтобы превратить его в загадку. – gasche

+0

Должен ли я использовать ** enq **? – user1679089

+0

Должен ли я использовать ** enq **? @gasche Большое спасибо! – user1679089

Смежные вопросы