type Node = record value: Int; next: ^Node end var first: ^Node second: ^Node third: ^Node proc malloc(size: Word): Pointer extern proc free(ptr: Pointer) extern proc sum(node: ^Node): Int var result: Int begin result := 0; if node = nil then result := 0 else result := node^.value + sum(node^.next) end; return result begin first := malloc(#size(Node)); second := malloc(#size(Node)); third := malloc(#size(Node)); first^.value := 1; first^.next := second; second^.value := 2; second^.next := third; third^.value := 3; third^.next := nil; assert(sum(first) = 6); assert(first^.next^.next^.value = 3); free(first); free(second); free(third) end.