#Smalltalk (79/66 chars)# ###version 1 (79):### { [ 'line1' print ]. [ 'line2' print ]. [ 'line3' print ]. [ 'line4' print ] } reverse map:#value little explanation:<br> [..] is a block (aka lambda closure);<br> {..} is an array constructor;<br> reverse and map are obvious;<br> #value evaluates a block closure. ###output:### line4line3line2line1 ###version 2 (66): Here is a version using reflection; it fetches the string constants of the block and prints them: Given any block containing string-prints: b := [ 'line1' print. 'line2' print. 'line3' print. 'line4' print ]. where 'normal' evaluation with: b value. gives: line1line2line3line4l The following extracts the string literals and prints them reverse: (b method literals select:[:l|l class==String]) reverse map:#print gives: line4line3line2line1 the code is a little unsafe (it requires that the block's containing method does not contain other string literals; but we are playing golf - not trusted software development ;-) character counts are w.o omittable whitespace