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?
>
>
>
>