我正在尝试在Haskell中制作一个计算器。我已经完成了它可以采取两个参数。但我陷入了可能需要两个以上争论的地步。例如输入类型为(+ 1 2)并打印3.但现在它应该能够接收(+ 1 2 3)并打印出6。
代码在这里:
N=6
x<-c(1:N)
#########################################
A<-combn(x,2)
B<-matrix(0,ncol(A),length(x))
for( i in 1:ncol(A) )
{
y<-rep(0,N)
y[A[1:nrow(A),i]]<-1
B[i,]<-y
}
######################################
E<-matrix(0,nrow(B),length(x)-nrow(A))
for( i in 1:nrow(B) )
{
q=0
for( j in 1:ncol(B) )
{
if( B[i,j]!=1 )
{
q=q+1
E[i,q]<-j
}}}
########################################
ASD<-combn(E[i,],2)
F<-matrix(0,nrow(B)*ncol(ASD),length(x))
q=0
for( i in 1:nrow(B) )
{
ASD<-combn(E[i,],2)
for( j in 1:ncol(ASD) )
{
B[i,ASD[1:nrow(ASD),j]]<-2
q=q+1
F[q,]<-B[i,]
B[i,ASD[1:nrow(ASD),j]]<-0
}}
答案 0 :(得分:0)
更改应用操作可能有所帮助。这是两个例子:
apply_op “+” xs = sum xs
apply_op “-“ [x] = -x
apply_op “-“ (x:xs@(_:_)) = x - sum xs