>>707
> Cとかなら、むしろ長くはなりますがロジック部分の関数は自作出来ますもんね。

いや、メソッドでもロジックは記述できますよ→http://ideone.com/xiEftE
逆にできないと考える理屈がちょっとわかりかねます

> 少ない知識で基本的な関数から応用的な関数まで作れると言うこと

言語それ自体の学習には向いていますね
SmalltalkはライブラリはもちろんIDEを含む処理系それ自体もSmalltalkで組まれているので
普段自分が使っている機能がどのように実現されているかを調べる過程で学習ができます
GNU Smalltalkはそこらへんがちょっと弱いのが難点ですね

無用かとは思いましたが、通常の方法で記述したナンバリング+複数ファイル対応版も
#!/usr/bin/gst -f

(argv := Smalltalk arguments) isEmpty ifFalse: [
 word := argv first.
 files := argv allButFirst.

 files do: [:file |
  | count |
  file displayNl.
  stream := FileStream open: file mode: FileStream read.
  count := 0.
  [stream atEnd] whileFalse: [
   | line |
   count := count + 1.
   line := (count printPaddedWith: Character space to: 4), ':', stream nextLine.
   (line indexOfSubCollection: word) > 0 ifTrue: [line displayNl]].
  stream close]
]