resource factorial op fact(k: int) returns f: int body factorial() proc fact(k) returns f if k < 0 -> f := -1 [] k = 0 or k = 1 -> f := 1 [] k > 1 -> f := k * fact(k-1) fi end fact end factorial resource driver() import factorial var n, stat : int var fac_cap : cap factorial fac_cap := create factorial() do true -> writes("What factorial to compute? ") stat := read(n) if stat = EOF -> write("no more input") stop [] stat = 0 -> write("illegal input -- try again") [] else -> write(n, "factorial is", fac_cap.fact(n)) fi od end driver /* ............... Example compile and run(s) % sr -o factorial factorial.sr % ./factorial What factorial to compute? 5 5 factorial is 120 What factorial to compute? abc illegal input -- try again What factorial to compute? 3 3 factorial is 6 What factorial to compute? ^D no more input */