hcl/t/fun-01.hcl

121 lines
1.8 KiB
HCL
Raw Normal View History

2023-11-12 14:03:39 +00:00
defun aaa(a b) {
| c |
set c (+ a b);
return c;
};
set k (aaa 10 20);
if (= k 30) {
printf "OK - %d\n" k;
} else {
printf "ERROR - %d\n" k;
};
2023-11-12 14:03:39 +00:00
## --------------------------------------
2023-11-12 14:03:39 +00:00
defun mkfun(t) {
return (fun(c) {
return (+ t c);
});
2024-03-09 05:16:51 +00:00
}
defun mkfun2(t) {
2024-03-09 05:16:51 +00:00
return {fun(c) {
return (fun(d) {
return (+ d c t)
2024-03-09 05:16:51 +00:00
})
}}
}
2023-11-12 14:03:39 +00:00
f := (mkfun 20);
set k (f 50);
if (k = 70) {
printf "OK - %d\n" k;
} else {
printf "ERROR - %d\n" k;
};
k := {
(mkfun 20) 30
}
if (k = 50) {
printf "OK - %d\n" k
} else {
printf "ERROR - %d\n" k
};
k := {
(mkfun 20) 30 ## the return value of this expression is ignored
(mkfun 20) 40 ## the return value of this expression is the return value of the block expression
}
if (k = 60) {
printf "OK - %d\n" k
} else {
printf "ERROR - %d\n" k
};
k := (((mkfun2 10) 40) 30)
2024-03-09 05:16:51 +00:00
if (k = 80) {
printf "OK - %d\n" k
} else {
printf "ERROR - %d\n" k
};
## --------------------------------------
## multiple return values
defun f(a :: b c) { b := (a + 10); c := (a + 20) }
[x, y] := (f 9)
if (x = 19) {
printf "OK - %d\n" x
} else {
printf "ERROR - %d\n" x
}
if (y = 29) {
printf "OK - %d\n" y
} else {
printf "ERROR - %d\n" y
}
## --------------------------------------
k := (defun qq(t) (t + 20))
x := (k 8)
y := (qq 9)
if (x = 28) {
printf "OK - %d\n" x
} else {
printf "ERROR - %d\n" x
}
if (x = 29) {
printf "OK - %d\n" x
} else {
printf "ERROR - %d\n" x
}
## --------------------------------------
defclass A | a b c | {
2024-02-03 09:50:10 +00:00
defun :* newInstance(x y z) {
set a x
set b y
set c z
return self
};
defun get-a() { return a; };
##defun get-b() b;
##defun get-c() c;
};
k := (A:newInstance 11 22 33);
##set k (A:newInstance 11 22 33);
set v (k:get-a);
if (= v 11) {
printf "OK - %d\n" v;
} else {
printf "ERROR - %d\n" v;
};