CSC448: Type Checking Revisited: Simple Functional Language [116/133] Previous pageContentsNext page

Consider a simple functional language:

M, N ::= n                    (n is a number)
       | s                    (s is a string)
       | x                    (x is a variable)
       | []                   (the empty list)
       | M :: N               (cons M onto the list N)
       | if M then N1 else N2
       | fun f x => M         (function that can call itself recursively using f inside M)
       | M N                  (application of a function to an argument)
       | let x = M in N       (bind the result of evaluating M to x inside N)
        

We might assume some builtin functions:

head : 'a list -> 'a
tail : 'a list -> 'a list
add : int -> (int -> int)
is_zero : int -> boolean
length : 'a list -> int
        

Aside: how would we translate the higher-order type int -> (int -> int) to a Java type?

Previous pageContentsNext page