多くのScheme処理系では、角括弧[]が通常の括弧()と同一視されます。
この角括弧の使いどころについてまとめてみました。

角括弧は使うな

まず始めに結論から書くと、今後書くSchemeのコードでは、角括弧は使用しない方が良いでしょう。というのも、R7RS*1における角括弧の扱いは、

[ ] { } Left and right square and curly brackets (braces)
are reserved for possible future extensions to the language.

すなわち、将来の言語拡張のための予約語ということになっているためです。

それでも使いたい場合

とはいえ、角括弧は一度R6RS*2で仕様として正式に括弧の代替物として認められています。

Matched square brackets can be used synonymously
with parentheses.

この時代に書いたコードの中には、角括弧を含んでいるものも多くあるはずです。
したがって、コーディングスタイルの統一という点で考えれば、R6RS時代の角括弧の使い方を学んでおいて損はないかもしれません。


R6RSでは角括弧の用途について、以下のように書かれています。

Revised^6 Report on the Algorithmic Language Scheme - Non-Normative Appendices -

要約すると、だいたい以下のような場合に角括弧を使用してよいということになります。

;; let-hoge系の[変数名 値]
(let ([a (hoge)]
      [b (fuga)])
  (+ a b))

;; cond, guard等の[条件 式]
(cond
 [(string? x) x]
 [else (x->string x)])

;; case等の[パターン 式]
(case status
  [(200) "OK"]
  [(404) "Not Found"]
  [(500) "Internal Server Error"])

簡単に言うと、手続きやマクロの呼び出しではなく、さらにリストでもない場合に使うのが良さそうです。
Gaucheの場合はクラスのスロット定義やmatchのパターンに使ってもいいかもしれません。

処理系の対応状況

ざっと調べてみた所、RacketやGauche, Guile等、現在の有名なScheme処理系は大半が角括弧を通常の括弧として扱うようになっているようです。
一度処理系に実装されてしまった以上、後方互換性のために延々と処理系の仕様に残り続けるでしょうし、それを信じて今後書くコードにもバリバリ角括弧を使ってしまうのもいいかもしれません(よくない)。