record list {value:integer, next:list}; { func cons (const v:integer, const n: list) -> list { return list{value := v, next := n} }; func map (const f:integer -> integer) -> list -> list { func mapl (const l:list) -> list { if l = nil then return nil else return cons(f(l.value),map(f)(l.next)) }; return mapl }; func plus (const n:integer) -> integer -> integer { func plusn (const x:integer) -> integer { return x+n }; return plusn }; func writelist (const l:list) { if l = nil then return else { write(l.value); writelist(l.next) } }; [* interactive tests *] const N := 5; var inc : integer := 0; write ("enter increment"); read(inc); const g := map(plus(inc)); loop { var l : list := nil; write ("enter ", N, " list elements "); var i := 0; for i := 0 to N-1 do { var x := 0; read (x); l := cons(x,l) }; write ("list is: "); writelist(l); write ("result is: "); writelist(g(l)) } }