11. FAQ (Frequently Asked Questions)
|
|
11.0. What to do when I get this error?
|
|
11.0.0. Module has undefined references
|
|
when you load a partially linked object file, or when a function you
compiled calls a C function that is not defined in any previously loaded
library or module you get the above error. To find out which functions
are not defined, type (mod-undefined)
.
11.0.1. compiler : Unknown Type in: ()
|
|
This message may occur for a variety of reasons, but the most common one
is that the compiler can't figure out the type of the return value of an
expression. A frequent cause is an hash-brace construct (inline C code
segment) that is the last expression of a function (and therefore its
return value). Lush cannot know the type of the value returned by a
hash-brace unless you cast it.
Example 1:
;; this causes an error
(de foo1-broken (x) ((-double-) x) #{ $x*$x #})
;; this is correct
(de foo1-correk (x) ((-double-) x) (to-double #{ $x*$x #}))
Example 2:
;; this causes an error (dunno the return type).
(de foo2-broken (x) ((-idx1- (-int-)) x) #{ *(IDX_PTR($x,int)) = 34 #})
;; this is correct (return value is nil).
(de foo2-correk (x) ((-idx1- (-int-)) x) #{ *(IDX_PTR($x,int)) = 34 #} ())
11.1.0. Read lines from a file into a list
|
|
(de read-lines(f)
(reading f
(let ((ans ()))
(while (<> (skip-char "\n\r\f") "\e")
(setq ans (cons (read-string) ans)))
(reverse ans))))
11.1.1. Apply a function to all elements of a vector
|
|
interpreted lisp way:
(idx-bloop ((x v)) (func x))
efficient compiled C code way:
(cidx-bloop ("i" ("v" v)) #{ *v = my_c_fun(*v); #}) ())
11.1.2. Get a pointer to the raw data of an idx
|
|
just use the idx-ptr function.
(idx-ptr m}
11.1.3. Get a pointer to a function written in Lisp
|
|
Some functions in popular libraries take function pointers as argument
(a typical example is the GSL function minimization routines). To obtain
a pointer to the compiled version is a function written in Lisp, simply
use the function to-gptr :
(de myfunc (x) ((-double-) x) (- (* x x) 2))
(dhc-make () myfunc)
(some-root-finding-function-in-C (to-gptr myfunc))
11.1.4. Know if a function can be used in compiled code
|
|
Just use compilablep :
? (compilablep +)
= t