matmul
FP matrix multiplication
- extensions
- raw README.md
- raw benchmark.4th
- raw matmul.4th
- raw package.4th
- raw runbenchs
- raw test.4th
\ This implements the X:locals syntax in pure ANS Forth with X:parse-name
\ It does not implement the increased number of locals in that extension
\ This file is in the public domain. NO WARRANTY.
\ This implementation technique has been described by John Hayes in
\ the SigForth Newsletter 4(2), Fall '92. He did not do the complete
\ job, but left some more mundane parts as an exercise to the reader.
\ Here we use PARSE-NAME, so we don't need to play around with >IN,
\ resulting in significant simplification.
s" X:parse-name" environment? drop
: parse-name1 ( "name" -- c-addr u )
parse-name dup 0= -16 and throw ;
: parse-rest ( "name" ... "namen" -- )
begin
parse-name1
s" :}" compare 0= until ;
: {helper ( f "name1"..."namen" -- )
parse-name1
2dup s" |" compare 0= if
2drop drop true parse-name1 then
2dup s" --" compare 0= if
2drop drop parse-rest exit then
2dup s" :}" compare 0= if
2drop drop exit then
rot dup if \ we are in the | part
0 postpone literal then
recurse (local) ;
: {: ( "X:locals definition" -- )
false {helper 0 0 (local) ; immediate
0 [if]
: test-swap {: a b -- b a :} ." xxx"
b a ;
1 2 test-swap . . .s cr
: test| {: a b | c d -- e f :}
a . b . c . d . ;
3 4 test| .s cr
[then]
by AntonErtl
Versions
2.0.2, 2.0.1, 2.0.0, 1.0.2, 1.0.1, 1.0.0
Tags
ansforth94, forth-94, forth-2012, floating-point-arithmetic, benchmark
Dependencies
None
Dependents
None