将一个元素推到堆栈ocaml上



有人能向我解释一下我如何将一个元素推送到ocaml中的堆栈中,并检查它是否是整数吗?我想您应该检查一下它是否在一个可变数字="0123456789中。大多数情况下,我不确定你应该在函数中使用什么变量,我知道你会传递一个堆栈变量,但"整数"变量会是什么?

let PushI (*what var goes here an int? or digit?*) (stk : stackVal list) : stackVal list  = 
let meth_Pop (stk : stackVal list) : stackVal list = 
(*just pops a value from the top of the stack if nothing in stack will return an error*)
match stk with
| h::t -> t
| _ -> ERROR::stk 

如果没有看到类型stackVal的定义,很难回答这个问题。

让我们假设它看起来像这样:

type stackVal = Int of int | Float of float

然后我会亲自定义pushI来获取int参数。

您可能在从字符流中获取令牌的某些上下文中工作。在这种情况下,您可能希望将所有的推送函数定义为使用字符串,而不是实际的数值。

如果你告诉我们(StackOverflow回答者(更多关于你的问题,我们可能会提供更多帮助。

对于问题的第一部分,您可以查看meth_Pop函数。它表明堆栈是一个列表,堆栈的顶部是列表的头部(函数中的h(,堆栈的其余部分是列表的尾部(函数中为t(。

要使用上面的stackVal将int值推送到堆栈中,您需要这样的东西:

let push myInt myStack = Int myInt :: myStack

最新更新