Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,14 @@
|
|||
#!/bin/env tclsh
|
||||
set count 0
|
||||
proc process val {
|
||||
puts $val
|
||||
incr ::count
|
||||
}
|
||||
# Schedule the output of the values
|
||||
foreach val $argv {
|
||||
after [expr {$val * 10}] [list process $val]
|
||||
}
|
||||
# Run event loop until all values output...
|
||||
while {$count < $argc} {
|
||||
vwait count
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
set sorted {}
|
||||
lmap x $argv {after $x [list lappend sorted $x]}
|
||||
while {[llength $sorted] != $argc} {
|
||||
vwait sorted
|
||||
}
|
||||
puts $sorted
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
#! /usr/bin/env tclsh
|
||||
|
||||
package require Tcl 8.6
|
||||
|
||||
# By aspect (https://wiki.tcl-lang.org/page/aspect). Modified slightly.
|
||||
# 1. Schedule N delayed calls to our own coroutine.
|
||||
# 2. Yield N times to grab the scheduled values. Print each.
|
||||
# 3. Store the sorted list in $varName.
|
||||
proc sleep-sort {ls varName} {
|
||||
foreach x $ls {
|
||||
after $x [info coroutine] $x
|
||||
}
|
||||
|
||||
set $varName [lmap x $ls {
|
||||
set newX [yield]
|
||||
puts $newX
|
||||
lindex $newX
|
||||
}]
|
||||
}
|
||||
|
||||
# Ensure the list is suitable for use with [sleep-sort].
|
||||
proc validate ls {
|
||||
if {[llength $ls] == 0} {
|
||||
error {list is empty}
|
||||
}
|
||||
|
||||
foreach x $ls {
|
||||
if {![string is integer -strict $x] || $x < 0} {
|
||||
error [list invalid value: $x]
|
||||
}
|
||||
}
|
||||
|
||||
return $ls
|
||||
}
|
||||
|
||||
coroutine c sleep-sort [validate $argv] ::sorted
|
||||
vwait sorted
|
||||
Loading…
Add table
Add a link
Reference in a new issue