Maxima中的重复输出

时间:2015-11-11 21:06:32

标签: maxima

我在Maxima中实现了冒泡排序方法:

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)
);

问题是输出是这样的:

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

如果我从倒数第二行删除print(l),这就是输出:

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

问题是如何在不重复的情况下打印结果?

感谢。

3 个答案:

答案 0 :(得分:3)

而不是group.id=ct_job_backfill zookeeper.session.timeout.ms=1000 zookeeper.sync.time.ms=200 auto.commit.enable=true auto.offset.reset=smallest rebalance.max.retries=20 rebalance.backoff.ms=2000 topic.name=contentTaskProd 只是将print(l)放回来从函数中返回l的值。 (不要放l,因为return(l)的效果实际上与其他语言有些不同。)

我还建议在排序前复制列表,这样就不会修改原始列表。在其他任何事情之前尝试return

答案 1 :(得分:1)

作为罗伯特·多迪尔答案的补充,还有一些用于解释正在发生的事情的词语。 Maxima具有以下功能的功能语言:

  • 块中的最后一个术语也是值"返回"通过这个街区;
  • print必须被视为一种功能,而不仅仅是一种陈述。

这两个想法解释了你的情况:

  • 代码中的print(l) 执行屏幕上的内容,但也是表达式评估为l(尝试类似a:print(5)$之类的内容它将打印数字5,但也将值5赋给变量a;
  • 由于print(l)也是块中的最后一个词,因此您的块将评估为l。

因此,您的代码打印l并且还"返回"它

答案 2 :(得分:0)

我发现了问题。而不是print(l)我应该使用append(l)