如何解决有没有办法在 Pharo 的操场内自动缩进代码?
我注意到,在使用 Pharo 时,无论我在 Playground 中输入代码的方式如何,如果我尝试运行它,但存在一些问题,当调试器打开时,它会显示您的代码很好地缩进。
例如,如果我在操场上有这个缩进不明显的程序:
| banditA banditB testBandits multiRun results |
banditA := [ 1.0 random <= 0.6 ifTrue: [ 1.0 ] ifFalse: [ 0.0 ] ].
banditB := [ 1.0 random > 0.6 ifTrue: [ 1.0 ] ifFalse: [ 0.0 ] ].
"Tests banditA and banditB n times each,to see which one is better."
testBandits := [ :n |
| A B |.
A := 0.0.
B := 0.0.
n timesRepeat: [ A := A + banditA value ].
n timesRepeat: [ B := B + banditB value ].
A > B
ifTrue: [ { A + B . banditA} ]
ifFalse: [ A < B
ifTrue: [ { A + B . banditB} ]
ifFalse: [ { A + B . { banditA. banditB } atRandom } ] ] ].
"Accumulate the results of size - 2 * nTests number of trials of winning
bandits,each preceded with a explore phase with 2 * nTests (half to each
bandit."
multiRun := [ :nTests :size |
| testResults sum |
sum := 0.0.
testResults := (testBandits value: nTests).
2 * nTests negated + size timesRepeat: [ sum := sum + (testResults at: 2) value ].
sum ].
"Average the returns of a thousand runs,to each even number of tests between 1 and
size = 1000."
results := (1 to: 500) collect:
[ :n | { 2*n. ((1 to: 1000) collect: [ :each | multiRun value: n value: 1000]) average}].
Transcript clear; show: 'Number of tests;Return'; cr.
results do: [ :each | Transcript show: (each at: 1); show: ';'; show: (each at: 2); cr ].
results sorted: [ :first :second | (first at: 2) > (second at: 2) ]
如果我使用 Ctrl+Shift+D 打开此代码示例中的调试器,调试器会显示一个格式良好的 DoIt 对象,减去注释:
DoIt
| banditA banditB testBandits multiRun results |
banditA := [ 1.0 random <= 0.6
ifTrue: [ 1.0 ]
ifFalse: [ 0.0 ] ].
banditB := [ 1.0 random > 0.6
ifTrue: [ 1.0 ]
ifFalse: [ 0.0 ] ].
testBandits := [ :n |
| A B |
A := 0.0.
B := 0.0.
n timesRepeat: [ A := A + banditA value ].
n timesRepeat: [ B := B + banditB value ].
A > B
ifTrue: [ {(A + B).
banditA} ]
ifFalse: [ A < B
ifTrue: [ {(A + B).
banditB} ]
ifFalse: [ {(A + B).
{banditA.
banditB} atRandom} ] ] ].
multiRun := [ :nTests :size |
| testResults sum |
sum := 0.0.
testResults := testBandits value: nTests.
2 * nTests negated + size
timesRepeat: [ sum := sum + (testResults at: 2) value ].
sum ].
results := (1 to: 500)
collect: [ :n |
{(2 * n).
((1 to: 1000) collect: [ :each | multiRun value: n value: 1000 ])
average} ].
Transcript
clear;
show: 'Number of tests;Return';
cr.
results
do: [ :each |
Transcript
show: (each at: 1);
show: ';';
show: (each at: 2);
cr ].
^ results sorted: [ :first :second | (first at: 2) > (second at: 2) ]
经过一番挖掘,我发现类浏览器中有一个格式化源代码的选项,只需右键单击源代码,然后选择源代码> 格式化代码:
但我找不到对操场内的源代码执行相同操作的方法,因为右键单击时未显示源代码 > 格式代码选项。如果我在操场内尝试键盘快捷键 Ctrl-T,它只会擦除所选的任何内容。我可以将代码从 Playground 复制到浏览器中,在那里格式化,然后将其复制回 Playground,或者可以打开示例上的调试器,然后将格式良好的代码复制到 Playground 中,擦除 DoIt 顶行和从最后一行的表达式中返回符号 ^,但这并不方便。所以我想知道是否有适当的方法。
顺便说一下,我用作示例的代码示例是我尝试模拟 Multi-armed bandit problem 一书中描述的心理实验中使用的 Algorithms to Live By: The Computer Science of Human Decisions 实例:
“一旦你熟悉它们,就很容易看到多臂 我们到处都是强盗。我们很少制作 孤立的决定,结果不会为我们提供任何 我们将来会用来做出其他决定的信息。所以 很自然地会问,就像我们在优化停止时所做的那样,人们有多好 通常倾向于解决这些问题——这个问题一直存在 心理学家和行为学家在实验室中进行了广泛的探索 经济学家。总的来说,人们似乎倾向于过度探索—— 不成比例地偏爱新的而不是最好的。在一个简单的 这种现象的证明,发表于 1966 年,Amos Tversky 和 Ward Edwards 进行了实验,向人们展示了一个盒子 上面有两盏灯,并告诉每盏灯会打开一个固定的(但 未知)时间的百分比。然后给了他们 1,000 有机会观察哪个灯亮了,或者下注 在没有得到观察它的结果。 (不像更多 传统的老虎机问题设置,在这里无法“拉” 这既是赌注又是观察;参与者不会 了解他们的赌注是否在最后得到了回报。)这是纯粹的 探索 vs. 开发,在获取信息上进取 坚决反对使用它。在大多数情况下,人们采用了 观察一段时间,然后押注什么的明智策略 似乎是最好的结果——但他们总是花更多的钱 观察时间比他们应该有。还有多少时间?在一 实验中,一盏灯有 60% 的时间亮,另外 40% 的时间亮 时间,差异既不特别明显也不特别 微妙的。在那种情况下,人们平均选择观察 505 次, 下注其他 495 次。但数学说他们应该有 仅在 38 次观察后开始下注 - 留下 962 次兑现机会 在。”
我想看看我是否可以得出 38 这个数字作为最佳数字,所以我写了这个模拟。非常接近,此图显示了一次运行的结果:
此特定运行的最大值为 34,非常接近 38。运行之间存在一些差异,因为曲线在顶部有点嘈杂,但最大值始终与 38 相差不到 10 个位置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。