Items tagged with array

Feed

Dear all, 

I have a procedure in Maple. Input is a list. The procedure should add to a list the list [6,5,4,3,2,1] and find if there are repetitions in this new list. After, if there are repetitions, it should return [NO, initial list] and if there are no repetitions, it should find how many elements of the first 5 are larger than the 6th element and return this number together with the sorted list - [6,5,4,3,2,1] in reverse order. (It sounds a bit strange but it's actually computing some sheaf cohomologies).

The problem is, when there are repetitions, the procedure returns an array, and if there are no repetitions, it returns exprseq. I would like both to be an array. Where's the mistake?

For example, coh([4, 0, 0, 0, 0, 4]) is an array and coh([0, 0, 0, 0, 0, 12]) is exprseq.

Here's the text of the program:


restart;
with(combinat);
with(ListTools);
n:=6;

coh := proc (L::list)

Hm := Array([0, 0]);

b := 0;

M := L+[6, 5, 4, 3, 2, 1];

a := evalb(ListTools:-FindRepetitions(M) = []);

if a = false then Hm := Array(['NO', L]) else

for i to 5 do if M[i] < M[6] then b := b+1

end if; 

end do;

K := sort(M);

KK := K+[-1, -2, -3, -4, -5, -6];

for j to n do

M[j] := KK[n-j+1]

end do;

Hm[1] := b;

Hm[2] := M;

print(Hm)

end if

end proc

Given a list L of n^2 integers, I can fill an nxn matrix through Matrix(n,n,L).  for instance:
n := 4:
L := [$1..n^2]:
A := Matrix(n,n, L);

I don't know how to do this with a 0-based Array.  I wished that as in the case of the Matrix, the command
B := Array(0..n-1, 0..n-1, L);
would assign B[0,0]=1, B[0,1]=2, ..., B[3,3]=16, but it doesn't.

I know how to fill B's entries through doubly nested for-loops but I suspect that there might be a clever way of doing that. If so, then please show me how.

 

hello, For the P, and A arrays which depend