R中反向波兰符号的评价
在R中计算RPN符号最有效的算法是什么 问题是:假设我们有R中反向波兰符号的评价,r,parsing,rpn,R,Parsing,Rpn,在R中计算RPN符号最有效的算法是什么 问题是:假设我们有 c("4", "13", "5", "/", "+") -> (4 + (13 / 5)) -> 6 如何编写计算任何输入RPN的通用函数 R是否具有堆栈数据结构 谢谢你的提示据我所知,没有一个专门的堆栈结构,你可以推送/弹出等,但你可以很容易地使用列表来实现同样的效果。在这里,我们使用相同的列表来保存输入RPN字符串并充当堆栈: rpn <- function(v) { l <- lapply(v, fu
c("4", "13", "5", "/", "+") -> (4 + (13 / 5)) -> 6
如何编写计算任何输入RPN的通用函数
R是否具有堆栈数据结构
谢谢你的提示据我所知,没有一个专门的堆栈结构,你可以推送/弹出等,但你可以很容易地使用列表来实现同样的效果。在这里,我们使用相同的列表来保存输入RPN字符串并充当堆栈:
rpn <- function(v) {
l <- lapply(v, function(x) if(grepl("^\\d+$", x)) as.numeric(x) else as.name(x))
i <- 1
while(length(l) >= i) {
if(!is.numeric(l[[i]])) {
l[[i - 2]] <- as.call(l[c(i, i - 2, i - 1)])
l[i:(i - 1)] <- NULL
i <- i - 1
} else i <- i + 1
}
l[[1]]
}
rpn巧合的是,几天前。也许这个要点中的某些东西会对你有用。你几乎可以肯定地通过构造call
对象来欺骗和破解它。哈德利·威克姆的书中有一章是关于这一点的process@ssdecontrol,为什么会作弊?这里的match.fun
有意义吗?我从来没有明确使用过它,但它似乎是*apply
@ssdecontrol背后的机制,讽刺的是,没有,你特别不想使用match.fun
。将as.call(list(match.fun(“+”,1,2))与as.call(list(as.name(“+”,1,2))
进行比较。在后一种情况下,R将+
识别为运算符,而在前一种情况下,R不识别。这两种情况都有效,但使用as.name
也会以可识别的形式生成算术表达式。@BrodieGrstack
pkg和rstackdeque
一样,都有堆栈结构。
v <- c("4", "13", "5", "/", "+")
rpn(v) # un-evaluated reparsed expression
# 4 + 13/5
eval(rpn(v)) # which you can evaluate
# [1] 6.6
v <- c("4", "13", "+", "5", "/", "8", "-", "10", "3", "+", "*")
rpn(v)
# ((4 + 13)/5 - 8) * (10 + 3)
eval(rpn(v))
# [1] -59.8