In Julia 0.4 anonymous functions are non-generic (in 0.5 they will,
however, be generic), so that's one way to create a non-generic function.
Aside from anonymous functions, the only non-generic are the builtins,
defined in C code using the add_builtin_func function:

$ ack add_builtin_func src
src/builtins.c
1196:static void add_builtin_func(const char *name, jl_fptr_t f)
1204:    add_builtin_func("is", jl_f_is);
1205:    add_builtin_func("typeof", jl_f_typeof);
1206:    add_builtin_func("sizeof", jl_f_sizeof);
1207:    add_builtin_func("issubtype", jl_f_subtype);
1208:    add_builtin_func("isa", jl_f_isa);
1209:    add_builtin_func("typeassert", jl_f_typeassert);
1210:    add_builtin_func("throw", jl_f_throw);
1211:    add_builtin_func("tuple", jl_f_tuple);
1214:    add_builtin_func("getfield",  jl_f_get_field);
1215:    add_builtin_func("setfield!",  jl_f_set_field);
1216:    add_builtin_func("fieldtype", jl_f_field_type);
1217:    add_builtin_func("nfields", jl_f_nfields);
1218:    add_builtin_func("isdefined", jl_f_isdefined);
1221:    add_builtin_func("arrayref", jl_f_arrayref);
1222:    add_builtin_func("arrayset", jl_f_arrayset);
1223:    add_builtin_func("arraysize", jl_f_arraysize);
1226:    add_builtin_func("applicable", jl_f_applicable);
1227:    add_builtin_func("invoke", jl_f_invoke);
1230:    add_builtin_func("apply_type", jl_f_instantiate_type);
1231:    add_builtin_func("_apply", jl_f_apply);
1232:    add_builtin_func("kwcall", jl_f_kwcall);
1233:    add_builtin_func("_expr", jl_f_new_expr);
1234:    add_builtin_func("svec", jl_f_svec);


You can determine the same list from the Julia side by this not-so-obvious
code:

julia> unique(filter(x->isa(x,Function) && isa(x.env,Symbol),
map(s->Base.(s), filter(s->isdefined(Base,s), names(Base, true, true)))))
22-element Array{Any,1}:
 issubtype
 is
 _apply
 _expr
 applicable
 apply_type
 arrayref
 arrayset
 arraysize
 fieldtype
 getfield
 invoke
 isa
 isdefined
 kwcall
 nfields
 setfield!
 svec
 throw
 tuple
 typeassert
 typeof


On Sun, Dec 27, 2015 at 2:57 PM, Ray Toal <[email protected]> wrote:

> In the REPL
>
>
> *julia> **methods(is)*
>
> *ERROR: ArgumentError: argument is not a generic function*
>
> * in methods at reflection.jl:180*
>
>
> and ditto for isa and typeof and perhaps others.
>
> Two quick questions:
>
>    - Is it possible for the programmer to create nongeneric functions in
>    Julia?
>    - If not, is there a complete (at least up to the current release
>    version of the language) list of nongeneric functions?
>
>
>
>

Reply via email to