ファイルに含まれるCを重く参照したり、行列にしばしばアクセスするような プログラムにおいては、Euslispで記述するよりはむしろCあるいは他の言語で 記述した方が効率が良く、記述もわかり易い。 EusLispは、Cで書かれたプログラムをリンクする方法を備えている。
もしCで書かれたEuslispの関数を定義したいならば、 Euslispで呼び出しできるCの関数はそれぞれ、3つの引き数を受けるように書かれなければ ならない。環境へのポインタと受け取る引き数の数とlispの引数領域を示す ポインタの3つである。 これらの引数は、c/eus.hの中のマクロによって参照されるため、 ctx, n, argvと名付けられねばならない。 Cのプログラムは、*eusdir*/c/eus.hをincludeしなければならない。 プログラマーは、そこに書かれた型やマクロに精通していなければならない。 エントリ関数名には、ソースファイルのbasenameを付けなければならない。
任意の数の実数の算術平均を計算するCの関数AVERAGEのサンプルコードは、 以下に示す通りである。 この例において、引数から実数値を得る方法、実数のポインタを作る方法、 特殊変数AVERAGEにポインタを設定する方法やエントリ関数aveに 関数やsymbolを定義する方法を知ることができる。 'cc -c -Dsun4 -DSolaris2 -K pic'でこのプログラムをコンパイルする。 c/eus.h内の正しい定義を選択するために、-Dsun4や-DSolaris2 が必要である。 -K picは、ロード可能な共有オブジェクトのために、位置に依存するコードを Cコンパイラで生成させるために必要である。 その後、コンパイルの結果である'.o'ファイルがEuslispにロードすることができる。 もっと完全な例は*eusdir*/clib/*.cに置かれている。 これらの例は、ここで書かれた方法で定義され、ロードされる。
/* ave.c */
/* (average &rest numbers) */
#include "/usr/local/eus/c/eus.h"
static pointer AVESYM;
pointer AVERAGE(ctx,n,argv)
context *ctx;
int n;
pointer argv[];
{ register int i;
float sum=0.0, a, av;
pointer result;
numunion nu;
for (i=0; i<n; i++) {
a=ckfltval(argv[i]);
sum += a;} /*get floating value from args*/
av=sum/n;
result=makeflt(av);
AVESYM->c.sym.speval=result; /*kindly set the result in symbol*/
return(result);}
ave(ctx,n,argv)
context *ctx;
int n;
pointer argv[];
{ char *p;
p="AVERAGE";
defun(ctx,p,argv[0],AVERAGE);
AVESYM=intern(ctx,p,strlen(p),userpkg); /* make a new symbol*/
}