ewe.wul
· 2.1 KiB · Text
Brut
Playground
@ ewe block do { @ewe blocking thread }
@ ewe block end ; @ewe blocking thread { }
@ ewe push $id { @ewe $id }
@ewe @ewe.dup ; @ewe.stack $ {
@ewe.stack ( $ $ )
}
@ewe @ewe.swap ; @ewe.stack ( $x $y ) {
@ewe.stack ( $y $x )
}
@ewe @ewe.drop ; @ewe.stack ( $x ) { }
@ewe @ewe.nip ; @ewe.stack ( $ $x ) {
@ewe.stack $x
}
@ewe @ewe.call ; @ewe.stack $fn {
@ewe def $fn ;
}
@ewe @ewe.if ; @ewe.stack ( $true $ true ) {
@ewe def $true
}
@ewe @ewe.if ; @ewe.stack ( $ $false false ) {
@ewe def $false
}
@ewe @ewe.lt ; @ewe.stack ~( $x $y ) {
@ewe.stack $z ; @code [$z = tostring(tonumber($x) < tonumber($y))]
}
@ewe @ewe.eq ; @ewe.stack ~( $x $y ) {
@ewe.stack $z ; @code [$z = tostring(tonumber($x) == tonumber($y))]
}
@ewe @ewe.gt ; @ewe.stack ~( $x $y ) {
@ewe.stack $z ; @code [$z = tostring(tonumber($x) > tonumber($y))]
}
@ewe @ewe.and ; @ewe.stack ( true ture ) { @ewe.stack true }
@ewe @ewe.and ; @ewe.stack ( $1 $2 ) { @ewe.stack false }
@ewe @ewe.or ; @ewe.stack ( true $ ) { @ewe.stack true }
@ewe @ewe.or ; @ewe.stack ( $ true ) { @ewe.stack true }
@ewe @ewe.or ; @ewe.stack ( $ $ ) { @ewe.stack false }
@ewe @ewe.not ; @ewe.stack true { @ewe.stack false }
@ewe @ewe.not ; @ewe.stack false { @ewe.stack true }
@ewe @ewe.sub ; @ewe.stack ~( $x $y ) {
@ewe.stack $z ; @code [$z = tostring($x - $y)]
}
@ewe @ewe.add ; @ewe.stack ~( $x $y ) {
@ewe.stack $z ; @code [$z = tostring($x + $y)]
}
@ewe @ewe.div ; @ewe.stack ~( $x $y ) {
@ewe.stack $z ; @code [$z = tostring($x / $y)]
}
@ewe @ewe.mod ; @ewe.stack ~( $x $y ) {
@ewe.stack $z ; @code [$z = tostring($x % $y)]
}
@ewe @ewe.mul ; @ewe.stack ~( $x $y ) {
@ewe.stack $z ; @code [$z = tostring($x * $y)]
}
@ewe @ewe.pop ; @ewe.stack $name {
@ewe pop $name
}
@ewe @ewe.push ; @ewe.stack $name {
@ewe push $name
}
@ewe @ewe.peek ; @ewe.stack $name {
@ewe peek $name
}
@ewe @ewe.block.main {
@ @ewe.blocking
}
@ewe @ewe.unblock.main ; @ @ewe.blocking { }
@ewe @ewe.unblock.main { }
@ewe ( $x ) { @ewe.stack $x }
@ ewe do , $op {
}
@ ewe doing , $op {
@ ewe doing ; @ewe $op ;
}
@ ewe doing , ewe end ; @ewe blocking thread { }
| 1 | @ ewe block do { @ewe blocking thread } |
| 2 | @ ewe block end ; @ewe blocking thread { } |
| 3 | @ ewe push $id { @ewe $id } |
| 4 | |
| 5 | @ewe @ewe.dup ; @ewe.stack $ { |
| 6 | @ewe.stack ( $ $ ) |
| 7 | } |
| 8 | |
| 9 | @ewe @ewe.swap ; @ewe.stack ( $x $y ) { |
| 10 | @ewe.stack ( $y $x ) |
| 11 | } |
| 12 | |
| 13 | @ewe @ewe.drop ; @ewe.stack ( $x ) { } |
| 14 | |
| 15 | @ewe @ewe.nip ; @ewe.stack ( $ $x ) { |
| 16 | @ewe.stack $x |
| 17 | } |
| 18 | |
| 19 | @ewe @ewe.call ; @ewe.stack $fn { |
| 20 | @ewe def $fn ; |
| 21 | } |
| 22 | |
| 23 | @ewe @ewe.if ; @ewe.stack ( $true $ true ) { |
| 24 | @ewe def $true |
| 25 | } |
| 26 | |
| 27 | @ewe @ewe.if ; @ewe.stack ( $ $false false ) { |
| 28 | @ewe def $false |
| 29 | } |
| 30 | |
| 31 | @ewe @ewe.lt ; @ewe.stack ~( $x $y ) { |
| 32 | @ewe.stack $z ; @code [$z = tostring(tonumber($x) < tonumber($y))] |
| 33 | } |
| 34 | |
| 35 | @ewe @ewe.eq ; @ewe.stack ~( $x $y ) { |
| 36 | @ewe.stack $z ; @code [$z = tostring(tonumber($x) == tonumber($y))] |
| 37 | } |
| 38 | |
| 39 | @ewe @ewe.gt ; @ewe.stack ~( $x $y ) { |
| 40 | @ewe.stack $z ; @code [$z = tostring(tonumber($x) > tonumber($y))] |
| 41 | } |
| 42 | |
| 43 | @ewe @ewe.and ; @ewe.stack ( true ture ) { @ewe.stack true } |
| 44 | @ewe @ewe.and ; @ewe.stack ( $1 $2 ) { @ewe.stack false } |
| 45 | |
| 46 | @ewe @ewe.or ; @ewe.stack ( true $ ) { @ewe.stack true } |
| 47 | @ewe @ewe.or ; @ewe.stack ( $ true ) { @ewe.stack true } |
| 48 | @ewe @ewe.or ; @ewe.stack ( $ $ ) { @ewe.stack false } |
| 49 | |
| 50 | @ewe @ewe.not ; @ewe.stack true { @ewe.stack false } |
| 51 | @ewe @ewe.not ; @ewe.stack false { @ewe.stack true } |
| 52 | |
| 53 | @ewe @ewe.sub ; @ewe.stack ~( $x $y ) { |
| 54 | @ewe.stack $z ; @code [$z = tostring($x - $y)] |
| 55 | } |
| 56 | |
| 57 | @ewe @ewe.add ; @ewe.stack ~( $x $y ) { |
| 58 | @ewe.stack $z ; @code [$z = tostring($x + $y)] |
| 59 | } |
| 60 | |
| 61 | @ewe @ewe.div ; @ewe.stack ~( $x $y ) { |
| 62 | @ewe.stack $z ; @code [$z = tostring($x / $y)] |
| 63 | } |
| 64 | |
| 65 | @ewe @ewe.mod ; @ewe.stack ~( $x $y ) { |
| 66 | @ewe.stack $z ; @code [$z = tostring($x % $y)] |
| 67 | } |
| 68 | |
| 69 | @ewe @ewe.mul ; @ewe.stack ~( $x $y ) { |
| 70 | @ewe.stack $z ; @code [$z = tostring($x * $y)] |
| 71 | } |
| 72 | |
| 73 | @ewe @ewe.pop ; @ewe.stack $name { |
| 74 | @ewe pop $name |
| 75 | } |
| 76 | |
| 77 | @ewe @ewe.push ; @ewe.stack $name { |
| 78 | @ewe push $name |
| 79 | } |
| 80 | |
| 81 | @ewe @ewe.peek ; @ewe.stack $name { |
| 82 | @ewe peek $name |
| 83 | } |
| 84 | |
| 85 | @ewe @ewe.block.main { |
| 86 | @ @ewe.blocking |
| 87 | } |
| 88 | |
| 89 | @ewe @ewe.unblock.main ; @ @ewe.blocking { } |
| 90 | |
| 91 | @ewe @ewe.unblock.main { } |
| 92 | |
| 93 | |
| 94 | @ewe ( $x ) { @ewe.stack $x } |
| 95 | |
| 96 | @ ewe do , $op { |
| 97 | |
| 98 | } |
| 99 | |
| 100 | @ ewe doing , $op { |
| 101 | @ ewe doing ; @ewe $op ; |
| 102 | } |
| 103 | |
| 104 | @ ewe doing , ewe end ; @ewe blocking thread { } |
| 105 | |
| 106 |
lamb.wul
· 1.1 KiB · Text
Brut
Playground
{
@lamb.id 1 ;
@code [
local lamb = {}
lamb.objects = {}
lamb.groups = setmetatable({}, {__mode = "v"})
]
}
@ewe push @lamb.id ; @ewe.stack $n {
@lamb.id $n
}
@ewe @lamb.new ; @lamb.id $id {
@lamb.id $id ;
@ ewe block do
, allocate new lamb
, increment id by 1
, ewe push $id
, ewe block end
}
@ewe @lamb.is ; @ewe.stack ( $class $obj ) {
@ewe.stack ( $obj ) ;
@code [lamb.objects[$obj].class = $class]
}
@ewe @lamb.set ; @ewe.stack ( $key $value $obj ) {
@ewe.stack ( $obj ) ;
@code [lamb.objects[$obj][$key] = $value]
}
@ewe @lamb.get ; @ewe.stack ( $key $obj ) {
@ewe.stack ( $value ) ;
@code [$value = lamb.objects[$obj][$key]]
}
@ewe @lamb.invoke ; @ewe.stack ~( $obj $1 $2 $3 $4 4 ) {
@ewe $obj does $1 $2 $3 $4
}
@ewe @lamb.invoke ; @ewe.stack ~( $obj $1 $2 $3 $4 $5 5 ) {
@ewe $obj does $1 $2 $3 $4 $5
}
@ allocate new lamb ; @lamb.id $n {
@lamb.id $n ;
@code [lamb.objects[$n] = {}]
}
@ increment id by 1 ; @lamb.id $n {
@ewe ( $n 1 @ewe.add [@lamb.id] @ewe.push )
}
| 1 | { |
| 2 | @lamb.id 1 ; |
| 3 | @code [ |
| 4 | local lamb = {} |
| 5 | lamb.objects = {} |
| 6 | lamb.groups = setmetatable({}, {__mode = "v"}) |
| 7 | ] |
| 8 | } |
| 9 | |
| 10 | @ewe push @lamb.id ; @ewe.stack $n { |
| 11 | @lamb.id $n |
| 12 | } |
| 13 | |
| 14 | @ewe @lamb.new ; @lamb.id $id { |
| 15 | @lamb.id $id ; |
| 16 | @ ewe block do |
| 17 | , allocate new lamb |
| 18 | , increment id by 1 |
| 19 | , ewe push $id |
| 20 | , ewe block end |
| 21 | } |
| 22 | |
| 23 | @ewe @lamb.is ; @ewe.stack ( $class $obj ) { |
| 24 | @ewe.stack ( $obj ) ; |
| 25 | @code [lamb.objects[$obj].class = $class] |
| 26 | } |
| 27 | |
| 28 | @ewe @lamb.set ; @ewe.stack ( $key $value $obj ) { |
| 29 | @ewe.stack ( $obj ) ; |
| 30 | @code [lamb.objects[$obj][$key] = $value] |
| 31 | } |
| 32 | |
| 33 | @ewe @lamb.get ; @ewe.stack ( $key $obj ) { |
| 34 | @ewe.stack ( $value ) ; |
| 35 | @code [$value = lamb.objects[$obj][$key]] |
| 36 | } |
| 37 | |
| 38 | @ewe @lamb.invoke ; @ewe.stack ~( $obj $1 $2 $3 $4 4 ) { |
| 39 | @ewe $obj does $1 $2 $3 $4 |
| 40 | } |
| 41 | |
| 42 | @ewe @lamb.invoke ; @ewe.stack ~( $obj $1 $2 $3 $4 $5 5 ) { |
| 43 | @ewe $obj does $1 $2 $3 $4 $5 |
| 44 | } |
| 45 | |
| 46 | @ allocate new lamb ; @lamb.id $n { |
| 47 | @lamb.id $n ; |
| 48 | @code [lamb.objects[$n] = {}] |
| 49 | } |
| 50 | |
| 51 | @ increment id by 1 ; @lamb.id $n { |
| 52 | @ewe ( $n 1 @ewe.add [@lamb.id] @ewe.push ) |
| 53 | } |
| 54 | |
| 55 |
main.wul
· 863 B · Text
Brut
Playground
{
@ make player at 100 100
, move player by 20 50
, @lamb pprint
}
@ move player by $x $y {
@ewe ( #player @ewe.peek move by $x $y 4 @lamb.invoke ) ;
}
@ewe $self does move by $x $y {
@ewe (
@ewe.block.main
$self
@ewe.dup x @lamb.get $x @ewe.add x @lamb.set
@ewe.dup y @lamb.get $y @ewe.add y @lamb.set
@ewe.drop
@ewe.unblock.main
)
}
@ make player at $x $y {
@ewe (
@ewe.block.main
@lamb.new
Player @lamb.is
$x x @lamb.set
$y y @lamb.set
#player @ewe.push
@ewe.unblock.main
)
}
@ewe push #player ; @ewe.stack $id {
#player $id
}
@ewe peek #player ; #player $p {
#player $p ; @ewe ( $p )
}
@ @lamb pprint {
@code [require "pprint" (lamb.objects)]
}
| 1 | { |
| 2 | @ make player at 100 100 |
| 3 | , move player by 20 50 |
| 4 | , @lamb pprint |
| 5 | } |
| 6 | |
| 7 | @ move player by $x $y { |
| 8 | @ewe ( #player @ewe.peek move by $x $y 4 @lamb.invoke ) ; |
| 9 | } |
| 10 | |
| 11 | @ewe $self does move by $x $y { |
| 12 | @ewe ( |
| 13 | @ewe.block.main |
| 14 | $self |
| 15 | @ewe.dup x @lamb.get $x @ewe.add x @lamb.set |
| 16 | @ewe.dup y @lamb.get $y @ewe.add y @lamb.set |
| 17 | @ewe.drop |
| 18 | @ewe.unblock.main |
| 19 | ) |
| 20 | } |
| 21 | |
| 22 | @ make player at $x $y { |
| 23 | @ewe ( |
| 24 | @ewe.block.main |
| 25 | @lamb.new |
| 26 | Player @lamb.is |
| 27 | $x x @lamb.set |
| 28 | $y y @lamb.set |
| 29 | #player @ewe.push |
| 30 | @ewe.unblock.main |
| 31 | ) |
| 32 | } |
| 33 | |
| 34 | |
| 35 | @ewe push #player ; @ewe.stack $id { |
| 36 | #player $id |
| 37 | } |
| 38 | |
| 39 | @ewe peek #player ; #player $p { |
| 40 | #player $p ; @ewe ( $p ) |
| 41 | } |
| 42 | |
| 43 | @ @lamb pprint { |
| 44 | @code [require "pprint" (lamb.objects)] |
| 45 | } |