如何在 Oz 中创建列表?
Posted
技术标签:
【中文标题】如何在 Oz 中创建列表?【英文标题】:How do I create a list in Oz? 【发布时间】:2010-11-30 14:41:14 【问题描述】:我正在尝试使用以下代码在Oz 中创建一个列表:
local Loop10 Xs in
proc Loop10 I
Xs=List.append Xs I
if I == 10 then skip
else
Browse I
Loop10 I+1
end
Browse Xs
end
Loop10 0
end
Mozart compiler 表明代码已被接受,但没有打开浏览窗口。我要做的就是在 Oz 中创建一个列表。
代码有什么问题?
【问题讨论】:
【参考方案1】:不确定这是否是您想要的,但要创建一个包含 X 和 Y(含)之间所有整数的列表,您可以这样做:
local
fun Loop From To
if From > To
then nil
else From | Loop From+1 To
end
end
in
Browse Loop 0 10 % Displays: [0,1,2,3,4,5,6,7,8,9,10]
end
【讨论】:
谢谢。实际上,我自己也偶然发现了同样的方法。尽管为了返回正确的列表, Loop 的第二个参数必须为 To|nil,以便列表始终以 nil 终止。谢谢。 在我看来,if From < To then nil
更安全、更合乎逻辑,因为你可以给一个小于“From”的“To”并得到 nil(而不是像上面程序中那样的无限列表)
@yakoudbz 好点(除了应该是>
,而不是<
)。完成。【参考方案2】:
另外你没有看到任何浏览器窗口的原因是评估线程由于这一行而暂停:
Xs=List.append Xs I
正如前面提到的,一个变量只能被赋值一次,但这一行还有其他问题。
您尝试将 Xs
附加到 I 但 Xs
仍然未绑定。线程因此暂停,直到为Xs
分配了一个值。
以交互方式输入:
declare Xs in
Browse List.append Xs [2 3 4]
当您看到没有任何反应时,没有打开浏览器。现在输入:
Xs= [1]
由于Xs
被绑定,它会解锁第一个评估“线程”并且会弹出浏览器。
附:抱歉回答晚了,我只是对 Oz 感兴趣:P
【讨论】:
当我将List.append
替换为 Append
时,这有效以上是关于如何在 Oz 中创建列表?的主要内容,如果未能解决你的问题,请参考以下文章