如何使用ocaml中的rec函数在队列中添加项目?

问题描述 投票:0回答:1

代码:

let qrec=Queue.create ()
let q=Queue.create ()

let queueaddforto=for i=1 to 5 do 
 Queue.add i q
done

let rec queueaddrec n=if n>0 then Queue.add n qrec else queueaddrec (n-1)

let ()=
 queueaddrec 5;
 Queue.iter print_int qrec;
 queueaddforto;
 Queue.iter print_int q

结果:

512345

似乎无法在rec函数中持续添加项目到队列中,我不知道为什么。是否有某种方法可以在rec函数中持续添加队列中的项目?

谢谢!

ocaml
1个回答
0
投票

queueaddrec
分支中没有对
n>0

的递归调用
let rec queueaddrec n=if n>0 then Queue.add n qrec else queueaddrec (n-1)

因此,当使用

n>0
调用时,
queueaddrec n
会在队列中添加一个元素。 另请注意,该行

 queueaddforto;

什么也不做:已经添加到

q
末尾的元素
queueaddforto

的定义
let queueaddforto=for i=1 to 5 do 
 Queue.add i q
done

换句话说,

queueaddforto
=
()
,这是一个常数值。

© www.soinside.com 2019 - 2024. All rights reserved.