NB. Copyright (c) 1989 1990, Roger K.W. Hui & K.E. Iverson
NB. Copyright (c) 1990-1992, Iverson Software Inc.
NB. All Rights Reserved.


NB. f/. f\  f\. models --------------------------------------------------

id     =. [.+

en     =. #@]
em     =. (en >.@% 1&>.@|@[)`(en 0&>.@>:@- [) @. (0&<:@[)
kay    =. en`em @. (0&<@[)
omask  =. (em,en) $ ($&0@|@[ , $&1@kay)

base   =. 1&>.@-@[ * i.@em
iind   =. base ,. |@[ <. en - base
seg    =. ((+i.)/@[ { ])"1 _

infix  =. (@seg) (iind `) (`]) \ ("0 _)
outfix =. (@#  ) (omask`) (`]) \ ("0 _)
prefix =. (@{.) (>:@,.@i.@#`) (`]) \
suffix =. (@}.) (   ,.@i.@#`) (`]) \

key    =. (@#) (=@[`) (`]) \

osub   =. >@]`(>@[ >@:{ ]) @. (*@#@])
oind   =. (+/&i./ </.&, i.)@(2&{.)@(,&1 1)@$
ob     =. (@(osub"0 1)) (oind`) (`(,@(<"_2))) \

bs     =. id (prefix : infix )
bsd    =. id (suffix : outfix)
sd     =. id (ob     : key   )


NB. f\.y ----------------------------------------------------------------

NB. Boolean
a=.1=?10 5$2
(<\. -: < bsd) a
(<\. -: < bsd) ,a
(]\. -: ] bsd) a
(+./\. -: +./ bsd) a

NB. literal
a=.a.{~32+?10 5$95
(<\. -: < bsd) a
(<\. -: < bsd) ,a
(]\. -: ] bsd) a

NB. integer
a=.?10 5$100
(<\. -: < bsd) a
(<\. -: < bsd) ,a
(]\. -: ] bsd) a
(+/\. -: +/ bsd) a

NB. floating point
a=.o._40+?10 5$100
(<\. -: < bsd) a
(<\. -: < bsd) ,a
(]\. -: ] bsd) a
(+/\. -: +/ bsd) a

NB. complex
a=.^0j0.01*_400+?10 5$1000
(<\. -: < bsd) a
(<\. -: < bsd) ,a
(]\. -: ] bsd) a
(+/\. -: +/ bsd) a

NB. boxed
t=.(1=?70$3)<;.1 ?70$100
a=.t{~?10 3$#t
(<\. -: < bsd) a
(<\. -: < bsd) ,a
(]\. -: ] bsd) a

'' -: <\. ''
'' -: <\. i.0 10 20


NB. f/\.y ----------------------------------------------------------------

(= /\. -: = / bsd) ?20$2
(< /\. -: < / bsd) ?20$2
(<./\. -: <./ bsd) ?20$2
(<:/\. -: <:/ bsd) ?20$2
(> /\. -: > / bsd) ?20$2
(>./\. -: >./ bsd) ?20$2
(>:/\. -: >:/ bsd) ?20$2
(+ /\. -: + / bsd) ?20$2
(+./\. -: +./ bsd) ?20$2
(+:/\. -: +:/ bsd) ?20$2
(* /\. -: * / bsd) ?20$2
(*./\. -: *./ bsd) ?20$2
(*:/\. -: *:/ bsd) ?20$2
(- /\. -: - / bsd) ?20$2
(% /\. -: % / bsd) ?20$2
(^ /\. -: ^ / bsd) ?20$2
(~:/\. -: ~:/ bsd) ?20$2
(| /\. -: | / bsd) ?20$2
(! /\. -: ! / bsd) ?20$2

*./(= /\. -: = / bsd)"1 #:i.32
*./(< /\. -: < / bsd)"1 #:i.32
*./(<./\. -: <./ bsd)"1 #:i.32
*./(<:/\. -: <:/ bsd)"1 #:i.32
*./(> /\. -: > / bsd)"1 #:i.32
*./(>./\. -: >./ bsd)"1 #:i.32
*./(>:/\. -: >:/ bsd)"1 #:i.32
*./(+ /\. -: + / bsd)"1 #:i.32
*./(+./\. -: +./ bsd)"1 #:i.32
*./(+:/\. -: +:/ bsd)"1 #:i.32
*./(* /\. -: * / bsd)"1 #:i.32
*./(*./\. -: *./ bsd)"1 #:i.32
*./(*:/\. -: *:/ bsd)"1 #:i.32
*./(- /\. -: - / bsd)"1 #:i.32
*./(% /\. -: % / bsd)"1 #:i.32
*./(^ /\. -: ^ / bsd)"1 #:i.32
*./(~:/\. -: ~:/ bsd)"1 #:i.32
*./(| /\. -: | / bsd)"1 #:i.32
*./(! /\. -: ! / bsd)"1 #:i.32

*./(= /\. -: = / bsd) |:#:i.32
*./(< /\. -: < / bsd) |:#:i.32
*./(<./\. -: <./ bsd) |:#:i.32
*./(<:/\. -: <:/ bsd) |:#:i.32
*./(> /\. -: > / bsd) |:#:i.32
*./(>./\. -: >./ bsd) |:#:i.32
*./(>:/\. -: >:/ bsd) |:#:i.32
*./(+ /\. -: + / bsd) |:#:i.32
*./(+./\. -: +./ bsd) |:#:i.32
*./(+:/\. -: +:/ bsd) |:#:i.32
*./(* /\. -: * / bsd) |:#:i.32
*./(*./\. -: *./ bsd) |:#:i.32
*./(*:/\. -: *:/ bsd) |:#:i.32
*./(- /\. -: - / bsd) |:#:i.32
*./(% /\. -: % / bsd) |:#:i.32
*./(^ /\. -: ^ / bsd) |:#:i.32
*./(~:/\. -: ~:/ bsd) |:#:i.32
*./(| /\. -: | / bsd) |:#:i.32
*./(! /\. -: ! / bsd) |:#:i.32

(<./\. -: <./bsd) 5e5-~20$1e6
(>./\. -: >./bsd) 5e5-~?20$1e6
(+ /\. -: + /bsd) 5e5-~?20$1e6
(* /\. -: * /bsd) 5e5-~?20$1e6
(- /\. -: - /bsd) 5e5-~?20$1e6
(% /\. -: % /bsd) 5e5-~?20$1e6

(<./\. -: <./bsd) 5e5-~?10 17$1e6
(>./\. -: >./bsd) 5e5-~?10 17$1e6
(+ /\. -: + /bsd) 5e5-~?10 17$1e6
(* /\. -: * /bsd) 5e5-~?10 17$1e6
(- /\. -: - /bsd) 5e5-~?10 17$1e6
(% /\. -: % /bsd) 5e5-~?10 17$1e6

(<./\. -: <./bsd) o.500-~?20$1e3
(>./\. -: >./bsd) o.500-~?20$1e3
(+ /\. -: + /bsd) o.500-~?20$1e3
(* /\. -: * /bsd) o.500-~?20$1e3
(- /\. -: - /bsd) o.500-~?20$1e3
(% /\. -: % /bsd) o.500-~?20$1e3

(<./\. -: <./bsd) o.455-~?10 17$1e3
(>./\. -: >./bsd) o.455-~?10 17$1e3
(+ /\. -: + /bsd) o.455-~?10 17$1e3
(* /\. -: * /bsd) o.455-~?10 17$1e3
(- /\. -: - /bsd) o.455-~?10 17$1e3
(% /\. -: % /bsd) o.455-~?10 17$1e3

(+ /\. -: + /bsd) j./?2 20$1e6
(* /\. -: * /bsd) j./?2 20$1e6
(- /\. -: - /bsd) j./?2 20$1e6
(% /\. -: % /bsd) j./?2 20$1e6

(+ /\. -: + /bsd) r.?10 17$1e6
(* /\. -: * /bsd) r.?10 17$1e6
(- /\. -: - /bsd) r.?10 17$1e6
(% /\. -: % /bsd) r.?10 17$1e6

(i.-1+n) -: 0,~+/\.n#1  [ n=.?1000
(n#1)    -: +/\.(-n){.1 [ n=.?1000

(-/\.x)  -: (#x)$2|0 1+#x=.2000$1
(-/\.x)  -: (#x)$2|0 1+#x=.2001$1
(-/\.x)  -: +/\.&.(*&((#x)$_1^1 0+#x)) x=._900+?100 7$2000
(-/\.x)  -: +/\.&.(*&((#x)$_1^1 0+#x)) x=._900+?101 7$2000

(%/\.x)  -: */\.&.(^&((#x)$_1^1 0+#x)) x=.>:?100 7$200
(%/\.x)  -: */\.&.(^&((#x)$_1^1 0+#x)) x=.>:?101 7$200


NB. x f\. y -------------------------------------------------------------

NB. Boolean
a=.1=?11 5$2
k (<\.   -: < bsd) a    [ k=._4+?11
k (<\.   -: < bsd) ,a   [ k=._4+?11
k (]\.   -: ] bsd) a    [ k=._4+?11
k (+./\. -: +./ bsd) a  [ k=._4+?11

NB. literal
a=.a.{~32+?11 5$95
k (<\.   -: < bsd) a    [ k=._4+?11
k (<\.   -: < bsd) ,a   [ k=._4+?11
k (]\.   -: ] bsd) a    [ k=._4+?11

NB. integer
a=.?11 5$110
k (<\.   -: < bsd) a    [ k=._4+?11
k (<\.   -: < bsd) ,a   [ k=._4+?11
k (]\.   -: ] bsd) a    [ k=._4+?11
k (+/\.  -: +/ bsd) a   [ k=._4+?11

NB. floating point
a=.o._40+?11 5$110
k (<\.   -: < bsd) a    [ k=._4+?11
k (<\.   -: < bsd) ,a   [ k=._4+?11
k (]\.   -: ] bsd) a    [ k=._4+?11
k (+/\.  -: +/ bsd) a   [ k=._4+?11

NB. complex
a=.^0j0.01*_400+?11 5$1100
k (<\.   -: < bsd) a    [ k=._4+?11
k (<\.   -: < bsd) ,a   [ k=._4+?11
k (]\.   -: ] bsd) a    [ k=._4+?11
k (+/\.  -: +/ bsd) a   [ k=._4+?11

NB. boxed
t=.(1=?70$3)<;.1 ?70$110
a=.t{~?11 3$#t
k (<\.   -: < bsd) a    [ k=._4+?11
k (<\.   -: < bsd) ,a   [ k=._4+?11
k (]\.   -: ] bsd) a    [ k=._4+?11
