Search code examples
maxima

Duplicated output in Maxima


I implemented the bubble sort method in Maxima as:

burbuja(l) := block(
    for i : 1 step 1 thru length(l) do (
        for j : length(l) - 1 step -1 while j >= i do (
            if l[j] > l[j + 1] then (
                elemento : l[j],
                l[j] : l[j + 1],
                l[j + 1] : elemento
            )
        )
    ), print(l)
);

The problem is that the output is something like this:

(%i1) burbuja([3,2,1]);
[1, 2, 3]
(%o1) [1, 2, 3]

If I remove print(l) from the penultimate line, this is the output:

(%i1) burbuja([3,2,1]);
(%o1) done

The question is how can I print the result without duplicating it?

Thanks.


Solution

  • Instead of print(l) just put l to return the value of l from the function. (Do not put return(l) as the effect of return is actually somewhat different from other languages.)

    I also recommend copying the list before sorting it, so that you don't modify the original list. Try l : copy(l) before anything else.