renamed hcl to hak
This commit is contained in:
128
t/fun-01.hak
Normal file
128
t/fun-01.hak
Normal file
@ -0,0 +1,128 @@
|
||||
fun 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;
|
||||
};
|
||||
|
||||
## --------------------------------------
|
||||
|
||||
fun mkfun(t) {
|
||||
return (fun(c) {
|
||||
return (+ t c);
|
||||
});
|
||||
}
|
||||
|
||||
fun mkfun2(t) {
|
||||
return {fun(c) {
|
||||
return (fun(d) {
|
||||
return (+ d c t)
|
||||
})
|
||||
}}
|
||||
}
|
||||
|
||||
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)
|
||||
if (== k 80) {
|
||||
printf "OK - %d\n" k
|
||||
} else {
|
||||
printf "ERROR - %d\n" k
|
||||
};
|
||||
## --------------------------------------
|
||||
|
||||
## multiple return values
|
||||
fun 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 := (fun 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 (== y 29) {
|
||||
printf "OK - %d\n" x
|
||||
} else {
|
||||
printf "ERROR - %d\n" x
|
||||
}
|
||||
|
||||
## --------------------------------------
|
||||
|
||||
class A {
|
||||
var a b c
|
||||
fun(#ci) newInstance(x y z) {
|
||||
set a x
|
||||
set b y
|
||||
set c z
|
||||
return self
|
||||
};
|
||||
|
||||
fun get-a() { return a; };
|
||||
##fun get-b() b;
|
||||
##fun 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, ot 11\n" v; };
|
||||
|
||||
## --------------------------------------
|
||||
|
||||
k := (fun (x) { + x 20 }) ## (+ x 20) would be syntax error, must be { + x 20 }
|
||||
v := (k 10)
|
||||
if (== v 30) { printf "OK - %d\n" v } else { printf "ERROR - %d, not 30\n" v };
|
||||
|
||||
## --------------------------------------
|
||||
fun k(x) (+ x 30) ## (+ x 30) is valid function body
|
||||
v := (k 10)
|
||||
if (== v 40) { printf "OK - %d\n" v } else { printf "ERROR - %d, not 40\n" v };
|
Reference in New Issue
Block a user