gpt4 book ai didi

algorithm - Smalltalk : best to avoid non-local returns? 算法重写

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:54:46 26 4
gpt4 key购买 nike

此方法(来自 SOM 基准测试)依赖于 Smalltalk 非本地返回。有没有办法在没有它们的情况下产生相同的结果?

placeQueenNonLocalReturn: c
1 to: 8 do: [ :r |
(self row: r column: c)
ifTrue: [
queenRows at: r put: c.
self row: r column: c put: false.
(c = 8) ifTrue: [ ^true ].
(self placeQueen: c + 1) ifTrue: [ ^true ].
self row: r column: c put: true ] ].
^false
!

注意(另一个相关问题):是否可以在不了解调用者和被调用者的情况下更改此代码?我想它应该可以更好地理解目的,但对于我的问题,该方法不应该是独立的吗?

最佳答案

是的,这是可能的。您使用非本地 return 只是为了快速退出 1 to: 8 do: 循环。您可以使用其他语法轻松编写循环,例如:

exit := false.
row := 1.
[row < 9 andNot: [exit]] whileTrue: [ (self row: r column: c)
ifTrue: [
queenRows at: r put: c.
self row: r column: c put: false.
c = 8 ifTrue: [ exit := true ]
ifFalse: [ (self placeQueen: c + 1)
ifTrue: [ exit := true ]
ifFalse: [self row: r column: c put: true ] ] ].
^exit

请注意,循环中对placeQueen:的调用似乎是递归的,可能是您方法的选择器错误。

我不明白“了解调用者和被调用者”是什么意思……我对代码进行了大部分语法重写。 self 控制也一样。此方法不是独立的,它似乎是 8 Queen 问题解决方案的一部分,但依赖于 (self row: r column: c) 来检查新皇后位置的有效性。

关于algorithm - Smalltalk : best to avoid non-local returns? 算法重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40184175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com