: parse-array-type ( name -- array )
"[" split unclip
- >r [ "]" ?tail drop string>number ] map r> add* ;
+ >r [ "]" ?tail drop string>number ] map r> prefix ;
M: string c-type ( name -- type )
CHAR: ] over member? [
>r >c-ushort-array r> byte-array>memory ;
: (define-nth) ( word type quot -- )
- >r heap-size [ rot * ] swap add* r> append define-inline ;
+ >r heap-size [ rot * ] swap prefix r> append define-inline ;
: nth-word ( name vocab -- word )
>r "-nth" append r> create ;
f swap box-parameter ;
: define-deref ( name vocab -- )
- >r dup CHAR: * add* r> create
- swap c-getter 0 add* define-inline ;
+ >r dup CHAR: * prefix r> create
+ swap c-getter 0 prefix define-inline ;
: define-out ( name vocab -- )
over [ <c-object> tuck 0 ] over c-setter append swap
- >r >r constructor-word r> r> add* define-inline ;
+ >r >r constructor-word r> r> prefix define-inline ;
: c-bool> ( int -- ? )
zero? not ;
#! staging violations
dup array? [
unclip >r [ dup word? [ word-def call ] when ] map
- r> add*
+ r> prefix
] when ;
: malloc-file-contents ( path -- alien len )
: alien-node-parameters* ( node -- seq )
dup parameters>>
- swap return>> large-struct? [ "void*" add* ] when ;
+ swap return>> large-struct? [ "void*" prefix ] when ;
: alien-node-return* ( node -- ctype )
return>> dup large-struct? [ drop "void" ] when ;
dup ?word-name swap 2array
over slot-spec-name
rot slot-spec-type 2array 2array
- [ { $instance } swap add ] assoc-map ;
+ [ { $instance } swap suffix ] assoc-map ;
: $spec-reader-values ( slot-spec class -- )
($spec-reader-values) $values ;
: $spec-reader-description ( slot-spec class -- )
[
"Outputs the value stored in the " ,
- { $snippet } rot slot-spec-name add ,
+ { $snippet } rot slot-spec-name suffix ,
" slot of " ,
- { $instance } swap add ,
+ { $instance } swap suffix ,
" instance." ,
] { } make $description ;
: $spec-writer-description ( slot-spec class -- )
[
"Stores a new value to the " ,
- { $snippet } rot slot-spec-name add ,
+ { $snippet } rot slot-spec-name suffix ,
" slot of " ,
- { $instance } swap add ,
+ { $instance } swap suffix ,
" instance." ,
] { } make $description ;
] reduce ;
: define-struct-slot-word ( spec word quot -- )
- rot slot-spec-offset add* define-inline ;
+ rot slot-spec-offset prefix define-inline ;
: define-getter ( type spec -- )
[ set-reader-props ] keep
members>> [ class-and ] with map <anonymous-union> ;\r
\r
: left-anonymous-intersection-and ( first second -- class )\r
- >r members>> r> add <anonymous-intersection> ;\r
+ >r members>> r> suffix <anonymous-intersection> ;\r
\r
: right-anonymous-intersection-and ( first second -- class )\r
- members>> swap add <anonymous-intersection> ;\r
+ members>> swap suffix <anonymous-intersection> ;\r
\r
: (class-and) ( first second -- class )\r
{\r
} cond ;\r
\r
: left-anonymous-union-or ( first second -- class )\r
- >r members>> r> add <anonymous-union> ;\r
+ >r members>> r> suffix <anonymous-union> ;\r
\r
: right-anonymous-union-or ( first second -- class )\r
- members>> swap add <anonymous-union> ;\r
+ members>> swap suffix <anonymous-union> ;\r
\r
: (class-or) ( first second -- class )\r
{\r
! update-map
: class-uses ( class -- seq )
- dup members swap superclass [ add ] when* ;
+ dup members swap superclass [ suffix ] when* ;
: class-usages ( class -- assoc )
[ update-map get at ] closure ;
swap redefine-mixin-class ; inline
: add-mixin-instance ( class mixin -- )
- [ 2drop ] [ [ add ] change-mixin-class ] if-mixin-member? ;
+ [ 2drop ] [ [ suffix ] change-mixin-class ] if-mixin-member? ;
: remove-mixin-instance ( class mixin -- )
[ [ swap remove ] change-mixin-class ] [ 2drop ] if-mixin-member? ;
: tuple>array ( tuple -- array )
dup tuple-layout
[ layout-size swap [ array-nth ] curry map ] keep
- layout-class add* ;
+ layout-class prefix ;
: >tuple ( seq -- tuple )
dup first tuple-layout <tuple> [
: with-datastack ( stack quot -- newstack )
datastack >r
>r >array set-datastack r> call
- datastack r> swap add set-datastack 2nip ; inline
+ datastack r> swap suffix set-datastack 2nip ; inline
: recursive-hashcode ( n obj quot -- code )
pick 0 <= [ 3drop 0 ] [ rot 1- -rot call ] if ; inline
reverse [ no-cond ] swap alist>quot ;
: linear-case-quot ( default assoc -- quot )
- [ >r [ dupd = ] curry r> \ drop add* ] assoc-map
+ [ >r [ dupd = ] curry r> \ drop prefix ] assoc-map
alist>quot ;
: (distribute-buckets) ( buckets pair keys -- )
: opcode-or ( opcode mask -- opcode' )
swap dup array?
- [ 1 cut* first rot bitor add ] [ bitor ] if ;
+ [ 1 cut* first rot bitor suffix ] [ bitor ] if ;
: 1-operand ( op reg rex.w opcode -- )
#! The 'reg' is not really a register, but a value for the
! Fixnums
: fixnum-op ( op hash -- pair )
- >r [ "x" operand "y" operand ] swap add r> 2array ;
+ >r [ "x" operand "y" operand ] swap suffix r> 2array ;
: fixnum-value-op ( op -- pair )
H{
\ fixnum- \ SUB overflow-template
: fixnum-jump ( op inputs -- pair )
- >r [ "x" operand "y" operand CMP ] swap add r> 2array ;
+ >r [ "x" operand "y" operand CMP ] swap suffix r> 2array ;
: fixnum-value-jump ( op -- pair )
{ { f "x" } { [ small-tagged? ] "y" } } fixnum-jump ;
IN: cpu.x86.sse2
: define-float-op ( word op -- )
- [ "x" operand "y" operand ] swap add H{
+ [ "x" operand "y" operand ] swap suffix H{
{ +input+ { { float "x" } { float "y" } } }
{ +output+ { "x" } }
} define-intrinsic ;
] each
: define-float-jump ( word op -- )
- [ "x" operand "y" operand UCOMISD ] swap add
+ [ "x" operand "y" operand UCOMISD ] swap suffix
{ { float "x" } { float "y" } } define-if-intrinsic ;
{
M: generic subwords
dup "methods" word-prop values
- swap "default-method" word-prop add ;
+ swap "default-method" word-prop suffix ;
M: generic forget-word
dup subwords [ forget ] each (forget-word) ;
: empty-method ( word -- quot )
[
picker % [ delegate dup ] %
- unpicker over add ,
- error-method \ drop add* , \ if ,
+ unpicker over suffix ,
+ error-method \ drop prefix , \ if ,
] [ ] make ;
: class-predicates ( assoc -- assoc )
] if ;
: standard-methods ( word -- alist )
- dup methods swap default-method add*
+ dup methods swap default-method prefix
[ 1quotation ] assoc-map ;
M: standard-combination make-default-method
r> recursive-state set ;
: infer-quot-recursive ( quot word label -- )
- recursive-state get -rot 2array add* infer-quot ;
+ recursive-state get -rot 2array prefix infer-quot ;
: time-bomb ( error -- )
[ throw ] curry recursive-state get infer-quot ;
dup value-literal callable? [
dup value-literal
over value-recursion
- rot f 2array add* infer-quot
+ rot f 2array prefix infer-quot
] [
drop bad-call
] if
[ [ swap collect-recursion* ] curry each-node ] { } make ;
: join-values ( node -- )
- collect-recursion [ node-in-d ] map meta-d get add
+ collect-recursion [ node-in-d ] map meta-d get suffix
unify-lengths unify-stacks
meta-d [ length tail* ] change ;
dup annotate-node
dup infer-classes-before
dup infer-children
- dup collect-recursion over add
+ dup collect-recursion over suffix
pick annotate-entry
node-child (infer-classes) ;
2dup 2slip rot [
2drop t
] [
- >r dup node-children swap node-successor add r>
+ >r dup node-children swap node-successor suffix r>
[ node-exists? ] curry contains?
] if
] [
[ shift bitor ] append 2curry ;
: bitfield-quot ( spec -- quot )
- [ (bitfield-quot) ] map [ 0 ] add* concat ;
+ [ (bitfield-quot) ] map [ 0 ] prefix concat ;
\ bitfield [ bitfield-quot ] 1 define-transform
over decoder-cr [
over cr-
"\n" ?head [
- over stream-read1 [ add ] when*
+ over stream-read1 [ suffix ] when*
] when
] when nip ;
[ value-literal sequence? ] [ drop f ] if ;
: member-quot ( seq -- newquot )
- [ [ t ] ] { } map>assoc [ drop f ] add [ nip case ] curry ;
+ [ [ t ] ] { } map>assoc [ drop f ] suffix [ nip case ] curry ;
: expand-member ( #call -- )
dup node-in-d peek value-literal member-quot f splice-quot ;
\r
: method-declaration ( method -- quot )\r
dup "method-generic" word-prop dispatch# object <array>\r
- swap "method-class" word-prop add* ;\r
+ swap "method-class" word-prop prefix ;\r
\r
: specialize-method ( quot method -- quot' )\r
method-declaration [ declare ] curry prepend ;\r
scan {
{ ";" [ tuple f ] }
{ "<" [ scan-word ";" parse-tokens ] }
- [ >r tuple ";" parse-tokens r> add* ]
+ [ >r tuple ";" parse-tokens r> prefix ]
} case ;
ERROR: staging-violation word ;
>r create-method r> define ;
: define-slot-word ( class slot word quot -- )
- rot >fixnum add* define-typecheck ;
+ rot >fixnum prefix define-typecheck ;
: reader-quot ( decl -- quot )
[
1 head-slice* [
"\r" ?tail drop "\r" split
] map
- ] keep peek "\r" split add concat
+ ] keep peek "\r" split suffix concat
] if ;
: vocab-dir+ ( vocab str/f -- path )
>r vocab-name "." split r>
- [ >r dup peek r> append add ] when*
+ [ >r dup peek r> append suffix ] when*
"/" join ;
: vocab-dir? ( root name -- ? )
: child-vocab? ( prefix name -- ? )
2dup = pick empty? or
- [ 2drop t ] [ swap CHAR: . add head? ] if ;
+ [ 2drop t ] [ swap CHAR: . suffix head? ] if ;
: child-vocabs ( vocab -- seq )
vocab-name vocabs [ child-vocab? ] with subset ;
: make-cumulative ( freq -- chars floats )
dup keys >byte-array
- swap values >float-array unclip [ + ] accumulate swap add ;
+ swap values >float-array unclip [ + ] accumulate swap suffix ;
:: select-random ( seed chars floats -- seed elt )
floats seed random -rot
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-: hsva>rgba ( hsva -- rgba ) [ 3 head hsv>rgb ] [ peek ] bi add ;
+: hsva>rgba ( hsva -- rgba ) [ 3 head hsv>rgb ] [ peek ] bi suffix ;
: gl-set-hsba ( hsva -- ) hsva>rgba gl-color ;
swap model-value over set-gadget-interior relayout-1 ;
: <color-model> ( model -- model )
- [ [ 256 /f ] map 1 add <solid> ] <filter> ;
+ [ [ 256 /f ] map 1 suffix <solid> ] <filter> ;
: <color-sliders> ( -- model gadget )
3 [ drop 0 0 0 255 <range> ] map
swap [ slot-spec-writer ] map append ;
: define-consult-method ( word class quot -- )
- pick add >r swap create-method r> define ;
+ pick suffix >r swap create-method r> define ;
: define-consult ( class group quot -- )
>r group-words swap r>
: fix ( word -- )
"Fixing " write dup pprint " and all usages..." print nl
- dup usage swap add* [
+ dup usage swap prefix [
"Editing " write dup .
"RETURN moves on to the next usage, C+d stops." print
flush
: html>faq ( div -- faq )
unclip swap { "h3" "ol" } [ tags-named ] with map
- first2 >r f add* r> [ html>question-list ] 2map <faq> ;
+ first2 >r f prefix r> [ html>question-list ] 2map <faq> ;
: header, ( faq -- )
dup faq-header ,
! to avoid confusion, remove if fry goes core
{ namespaces:, [ [ curry ] ((fry)) ] }
- [ swap >r add r> (fry) ]
+ [ swap >r suffix r> (fry) ]
} case
] if ;
: values-row ( seq -- seq )
unclip \ $snippet swap ?word-name 2array
- swap dup first word? [ \ $instance add* ] when 2array ;
+ swap dup first word? [ \ $instance prefix ] when 2array ;
: $values ( element -- )
"Inputs and outputs" $heading
[ length ] keep [ (graded-ker/im-d) ] curry map ;
: graded-betti ( generators -- seq )
- basis graded graded-ker/im-d flip first2 1 head* 0 add* v- ;
+ basis graded graded-ker/im-d flip first2 1 head* 0 prefix v- ;
! Bi-graded for two-step complexes
: (bigraded-ker/im-d) ( u-deg z-deg bigraded-basis -- null/rank )
[ basis graded ] bi@ tensor bigraded-ker/im-d
[ [ [ first ] map ] map ] keep
[ [ second ] map 2 head* { 0 0 } prepend ] map
- 1 tail dup first length 0 <array> add
+ 1 tail dup first length 0 <array> suffix
[ v- ] 2map ;
! Laplacian
drop nil
] [
[ car ] keep cdr [ car lcartesian-product ] keep cdr list>array swap [
- swap [ swap [ add ] lmap-with ] lmap-with lconcat
+ swap [ swap [ suffix ] lmap-with ] lmap-with lconcat
] reduce
] if ;
: point-free-end ( quot args -- newquot )
over peek special?
[ drop-locals >r >r peek r> localize r> append ]
- [ drop-locals nip swap peek add ]
+ [ drop-locals nip swap peek suffix ]
if ;
: (point-free) ( quot args -- newquot )
: add-if-free ( vars object -- vars )
{
- { [ dup local-writer? ] [ "local-reader" word-prop add ] }
- { [ dup lexical? ] [ add ] }
- { [ dup quote? ] [ quote-local add ] }
+ { [ dup local-writer? ] [ "local-reader" word-prop suffix ] }
+ { [ dup lexical? ] [ suffix ] }
+ { [ dup quote? ] [ quote-local suffix ] }
{ [ t ] [ free-vars append ] }
} cond ;
{ DEBUG NOTICE NOTICE WARNING ERROR CRITICAL } ;\r
\r
: send-to-log-server ( array string -- )\r
- add* "log-server" get send ;\r
+ prefix "log-server" get send ;\r
\r
SYMBOL: log-service\r
\r
{ 0.25 0.25 0.25 } ! dark grey
{ 0.75 0.75 0.75 } ! medium grey
{ 1 1 1 } ! white
-} [ 1 add ] map >color-table ;
+} [ 1 suffix ] map >color-table ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0 [ over 0 > ] [ 1+ [ /mod ] keep swap ] [ ] unfold reverse 2nip ;
: (>permutation) ( seq n -- seq )
- [ [ dupd >= [ 1+ ] when ] curry map ] keep add* ;
+ [ [ dupd >= [ 1+ ] when ] curry map ] keep prefix ;
: >permutation ( factoradic -- permutation )
reverse 1 cut [ (>permutation) ] each ;
[ delete-at ] with-methods ;
: method>spec ( method -- spec )
- dup method-classes swap method-generic add* ;
+ dup method-classes swap method-generic prefix ;
: parse-method ( -- quot classes generic )
parse-definition dup 2 tail over second rot first ;
: METHOD:
location
- >r parse-method [ define-method ] 2keep add* r>
+ >r parse-method [ define-method ] 2keep prefix r>
remember-definition ; parsing
! For compatibility
gl-function-calling-convention
scan
scan dup
- scan drop "}" parse-tokens swap add*
+ scan drop "}" parse-tokens swap prefix
gl-function-number
[ gl-function-pointer ] 2curry swap
";" parse-tokens [ "()" subseq? not ] subset
: fetch-each ( object -- object )
fetch-statement [
- buf get alien>char-string res get swap add res set
+ buf get alien>char-string res get swap suffix res set
fetch-each
] [ ] if ;
: run-query ( object -- object )
execute-statement [
- buf get alien>char-string res get swap add res set
+ buf get alien>char-string res get swap suffix res set
fetch-each
] [ ] if ;
: <&> ( parser1 parser2 -- parser )
over and-parser? [
- >r and-parser-parsers r> add
+ >r and-parser-parsers r> suffix
] [
2array
] if and-parser construct-boa ;
: <:&> ( parser1 parser2 -- result )
#! Same as <&> except flatten the result.
- <&> [ first2 add ] <@ ;
+ <&> [ first2 suffix ] <@ ;
: <&:> ( parser1 parser2 -- result )
#! Same as <&> except flatten the result.
- <&> [ first2 swap add* ] <@ ;
+ <&> [ first2 swap prefix ] <@ ;
: <:&:> ( parser1 parser2 -- result )
#! Same as <&> except flatten the result.
:: (setup-lr) ( r l s -- )
s head>> l head>> eq? [
l head>> s (>>head)
- l head>> [ s rule>> add ] change-involved-set drop
+ l head>> [ s rule>> suffix ] change-involved-set drop
r l s next>> (setup-lr)
] unless ;
h [ p heads get at ]
|
h [
- m r h involved-set>> h rule>> add member? not and [
+ m r h involved-set>> h rule>> suffix member? not and [
fail p <memo-entry>
] [
r h eval-set>> member? [
dup first 2 tail* swap second 2 head = ;
: clean ( seq -- seq )
- [ unclip 1 head add* concat ] map [ all-unique? ] subset ;
+ [ unclip 1 head prefix concat ] map [ all-unique? ] subset ;
: add-missing-digit ( seq -- seq )
- dup natural-sort 10 seq-diff first add* ;
+ dup natural-sort 10 seq-diff first prefix ;
: interesting-pandigitals ( -- seq )
17 candidates { 13 11 7 5 3 2 } [
: max-path ( triangle -- n )
dup length 1 > [
- 2 cut* first2 max-children [ + ] 2map add max-path
+ 2 cut* first2 max-children [ + ] 2map suffix max-path
] [
first first
] if ;
! Not strictly needed, but it is nice to be able to dump the triangle after the
! propagation
: propagate-all ( triangle -- newtriangle )
- reverse [ first dup ] keep 1 tail [ propagate dup ] map nip reverse swap add ;
+ reverse [ first dup ] keep 1 tail [ propagate dup ] map nip reverse swap suffix ;
: sum-divisors ( n -- sum )
dup 4 < [ { 0 1 3 4 } nth ] [ (sum-divisors) ] if ;
: define-qualified ( vocab-name -- )
dup require
- dup vocab-words swap CHAR: : add
+ dup vocab-words swap CHAR: : suffix
[ -rot >r append r> ] curry assoc-map
use get push ;
if 2curry ;
: or-predicates ( quots -- quot )
- [ \ dup add* ] map [ [ t ] ] f short-circuit \ nip add ;
+ [ \ dup prefix ] map [ [ t ] ] f short-circuit \ nip suffix ;
: <@literal [ nip ] curry <@ ;
if 2curry ;
: or-predicates ( quots -- quot )
- [ \ dup add* ] map [ [ t ] ] f short-circuit \ nip add ;
+ [ \ dup prefix ] map [ [ t ] ] f short-circuit \ nip suffix ;
: literal-action [ nip ] curry action ;
: monotonic-split ( seq quot -- newseq )
[
- >r dup unclip add r>
+ >r dup unclip suffix r>
v, [ pick ,, call [ v, ] unless ] curry 2each ,v
] { } make ;
6 nrot 6 nrot 2array
5 nrot 5 nrot 2array
0 0 2array <node>
- nodes> swap add >nodes ;
+ nodes> swap suffix >nodes ;
: spng ( id id-a id-b k damp rest-length -- )
6 nrot drop
5 nrot node-id
5 nrot node-id
<spring>
- springs> swap add >springs ;
+ springs> swap suffix >springs ;
! STATES: set-name state1 state2 ... ;
";" parse-tokens
[ length ] keep
- unclip add
+ unclip suffix
[ create-in swap 1quotation define ] 2each ; parsing
TUPLE: state place data ;
: add-row ( board -- )
dup board-rows over board-width f <array>
- add* swap set-board-rows ;
+ prefix swap set-board-rows ;
: top-up-rows ( board -- )
dup board-height over board-rows length = [
: staging-image-name ( profile -- name )
"staging."
- swap strip-word-names? [ "strip" add ] when
+ swap strip-word-names? [ "strip" suffix ] when
"-" join ".image" 3append temp-file ;
DEFER: ?make-staging-image
] { } make ;
: run-factor ( vm flags -- )
- swap add* dup . run-with-output ; inline
+ swap prefix dup . run-with-output ; inline
: make-staging-image ( profile -- )
vm swap staging-command-line run-factor ;
try-everything load-failures. ;\r
\r
: unrooted-child-vocabs ( prefix -- seq )\r
- dup empty? [ CHAR: . add ] unless\r
+ dup empty? [ CHAR: . suffix ] unless\r
vocabs\r
[ find-vocab-root not ] subset\r
[\r
vocab-roots get [\r
dup pick (all-child-vocabs) [ >vocab-link ] map\r
] { } map>assoc\r
- swap unrooted-child-vocabs f swap 2array add ;\r
+ swap unrooted-child-vocabs f swap 2array suffix ;\r
\r
: all-child-vocabs-seq ( prefix -- assoc )\r
vocab-roots get swap [\r
\ break t "break?" set-word-prop
: walk ( quot -- quot' )
- \ break add* [ break rethrow ] recover ;
+ \ break prefix [ break rethrow ] recover ;
: add-breakpoint ( quot -- quot' )
- dup [ break ] head? [ \ break add* ] unless ;
+ dup [ break ] head? [ \ break prefix ] unless ;
: (step-into-quot) ( quot -- ) add-breakpoint call ;
] change-frame ;
: step-out-msg ( continuation -- continuation' )
- [ nip \ break add ] change-frame ;
+ [ nip \ break suffix ] change-frame ;
{
{ call [ (step-into-quot) ] }
: command-map. ( command-map -- )
[ command-map-row ] map
{ "Shortcut" "Command" "Word" "Notes" }
- [ \ $strong swap ] { } map>assoc add*
+ [ \ $strong swap ] { } map>assoc prefix
$table ;
: $command-map ( element -- )
grid-dim get spin set-axis ;
: draw-grid-lines ( gaps orientation -- )
- grid get rot grid-positions grid get rect-dim add [
+ grid get rot grid-positions grid get rect-dim suffix [
grid-line-from/to gl-line
] with each ;
: sloppy-pick-up ( loc gadget -- path )
2dup sloppy-pick-up* dup
- [ [ wet-and-sloppy sloppy-pick-up ] keep add* ]
+ [ [ wet-and-sloppy sloppy-pick-up ] keep prefix ]
[ 3drop { } ]
if ;
! io.launcher instead.
: >argv ( seq -- alien )
- [ malloc-char-string ] map f add >c-void*-array ;
+ [ malloc-char-string ] map f suffix >c-void*-array ;
: exec ( pathname argv -- int )
[ malloc-char-string ] [ >argv ] bi* execv ;
: rule-chars* ( rule -- string )
dup rule-chars
swap rule-start matcher-text
- text-hash-char [ add ] when* ;
+ text-hash-char [ suffix ] when* ;
: add-rule ( rule ruleset -- )
>r dup rule-chars* >upper swap