control.st
来自「四皇后问题」· ST 代码 · 共 51 行
ST
51 行
"
control the values produced by a generator
"
Class ControlGenerator :Generator
| firstGenerator secondGenerator
currentFirst currentSecond
controlBlock computeBlock |
[
initA: fGen b: sGen control: aBlock compute: anotherBlock
firstGenerator <- fGen.
secondGenerator <- sGen.
controlBlock <- aBlock.
computeBlock <- anotherBlock
| first
currentFirst <- firstGenerator first.
currentSecond <- secondGenerator first.
(currentFirst isNil & currentSecond isNil) ifTrue: [^ nil].
^ self controlGeneratorNext
| next
^ self controlGeneratorNext
| controlGeneratorNext | control returnedValue |
control <- 0.
[ control anyMask: 12] whileFalse: [
control <- controlBlock value: currentFirst
value: currentSecond.
(control allMask: 64) ifTrue: [^nil].
(control allMask: 32) ifTrue:
[currentFirst <- firstGenerator first].
(control allMask: 16) ifTrue:
[currentSecond <- secondGenerator first].
(control allMask: 12)
ifTrue:
[returnedValue <- computeBlock
value: currentFirst value: currentSecond]
ifFalse: [
(control allMask: 8) ifTrue:
[returnedValue <- computeBlock value: currentFirst].
(control allMask: 4) ifTrue:
[returnedValue <- computeBlock value: currentSecond].
].
(control allMask: 2) ifTrue:
[currentFirst <- firstGenerator next].
(control allMask: 1) ifTrue:
[currentSecond <- secondGenerator next].
].
^ returnedValue
]
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?