C Reference - kevinlawler/kona GitHub Wiki
| Type | Definition |
|---|---|
void * |
V |
long |
I |
double |
F |
char |
C |
char * |
S |
const char * |
cS |
unsigned char |
UC |
unsigned long |
UI |
| Macro | Definition |
|---|---|
Z |
static |
O |
printf |
R |
return |
SW |
switch |
CS(n,x) |
case n:x;break; |
CSR(n,x) |
case n:x; |
CD |
default |
II |
LONG_MAX |
IN |
LONG_MIN |
FI |
1/0.0 |
FN |
0/0.0 |
| Macro | Definition | Meaning |
|---|---|---|
xt |
x->t |
Type of array x
|
xn |
x->n |
Number of elements in array x
|
P(x,y) |
{if(x)R(y);} |
If x is true return y
|
U(x) |
P(!(x),0) |
If x is false return 0Example usage: K z=newK(0,3); U(z)means create new list with 3 elements, but if could not, return 0 |
GC |
goto cleanup |
Jump to the cleanup section within a function |
AE(x) |
(sizeof(x)/sizeof(x[0])) |
Number of elements in array x
|
diff(x,y) |
(((V*)(x)) - (V*)(y)) |
Difference between pointers x and y
|
in(x,y) |
(diff(x,y) < AE(y) && diff(x,y)>=0) |
Check if pointer x is inside the range of y
|
Loop from 0 to n-1 executing statement x on each iteration. i is initially 0 and is incremented on each iteration, _i is set to the value of n.
For the macros DO2 and DO3 the variable i is replaced by j and k, _i by _j and _k respectively.
DO(n,x) |
{I i=0,_i=(n);for(;i<_i;++i){x;}} |
DO2(n,x) |
{I j=0,_j=(n);for(;j<_j;++j){x;}} |
DO3(n,x) |
{I k=0,_k=(n);for(;k<_k;++k){x;}} |
| Macro | Error |
|---|---|
ME |
Memory(wsfull) |
TE |
Type |
VE |
Valence |
PE |
Parse |
IE |
Int |
XE |
Index |
LE |
Length |
RE |
Rank |
NE |
Nonce |
DOE |
Domain |
NYI |
Not yet implemented |
typedef struct k0{I c,t,n;struct k0 *k[1];} *K;
| Field | Meaning |
|---|---|
I c |
Reference Count |
I t |
Type |
I n |
Number of elements |
struct k0 *k[1] |
Pointer to object's data. It is array to allow "bracket" indexing, like here:
|
An object's type t is an integer in the interval [-4,7]. A negative integer indicates that the object is an array of the corresponding type, the object will have more than one element of the type.
| Type | Scalar | Array |
|---|---|---|
| List | 0 | |
| Integer | 1 | -1 |
| Float | 2 | -2 |
| Char | 3 | -3 |
| Symbol | 4 | -4 |
| Dictionary | 5 | |
| Null | 6 | |
| Function(type 7) | 7 | |
Refer to Data and Execution for a more detailed explanation of K objects.
| Name | Definition | Result |
|---|---|---|
ke(x) |
(((K)x)->k) |
K pointer to object's data |
kK(x) |
ke(x) |
K pointer to object's data |
kI(x) |
((I*)ke(x)) |
I pointer to I data |
kF(x) |
((F*)ke(x)) |
F pointer to F data |
kC(x) |
((C*)ke(x)) |
C pointer to C data |
kS(x) |
((S*)ke(x)) |
S pointer to S data |
kV(x) |
((V*)ke(x)) |
Void pointer to object's data |
kVC(x) |
((K)kV(x)[CODE]) |
K pointer to CODE void pointer in a type 7 object |
kW(x) |
((V*)kS(kVC(x))) |
Void pointer to string in CODE of a type 7 object |
K newK(I t,I n) |
Creates a K object with type t and number of elements n
|
| Function | Result |
|---|---|
K Ki(I x) |
K object of type I with an element x
|
K Kf(F x) |
K object of type F with an element x
|
K Kc(C x) |
K object of type C with an element x
|
K Ks(S x) |
K object of type S with an element x
|
K Kd() |
Empty dictionary object |
K Kn() |
Null object |
K Kv() |
Function(type 7) object |
Defining a simple function to calculate the average of an integer array.
K average(K x)
{
I sum=0; K z;
P(1!=ABS(xt),DOE); // Check if object is of type integer, return a domain error if it isn't
DO(xn, sum+=kI(x)[i]); // Sum the elements of the array
U(z=Kf(sum/(F)xn)); // Generate a float object with a single element equal to the average
R z; // Return the average
}