(WheelerとGloriaの「ReadableLisp S-expressions Project」へのリンクを提供した、Andrew Cookeの回答へのクレジット)
上記のリンクは、S式やClojureを含むすべての言語に読みやすい構文を提供することを目的としたプロジェクトです。結論はそれができるということです:括弧なしで読みやすいLispを持つ方法があります。
基本的に、David Wheelerのプロジェクトは、Lispのような言語に構文糖衣構文を追加して、ドメイン固有言語に対するLispのサポートを壊さない方法でより現代的な構文を提供することです。拡張機能はオプションであり、下位互換性があるため、必要なだけ追加したり、既存のコードと組み合わせたりすることができます。
このプロジェクトでは、次の3つの新しい式タイプを定義します。
- 中置式。 (+ 1 2 3)は、任意の中置演算子を使用するすべての場所で{1 + 2+3}になります。(インライン式で{1 + 2 * 3}のように複数の演算子を使用する場合は、注意が必要な特殊なケースがありますが、{1 + {2 * 3}}は期待どおりに機能します)。
- 新詩派の表現。(fxy)はf(xy)になります(関数名とそのパラメーターの間にスペースを入れないようにする必要があります)
- 甘い表現。開いているparensと閉じているparensは、(オプションの)pythonのようなセマンティックインデントに置き換えることができます。甘い表現は、従来の括弧のS式と自由に組み合わせることができます。
その結果、Lispに準拠しますが、はるかに読みやすいコードになります。新しいシンタックスシュガーが読みやすさを向上させる方法の例:
(define (gcd_ a b)
(let (r (% b a))
(if (= r 0) a (gcd_ r a))))
(define-macro (my-gcd)
(apply gcd_ (args) 2))
になります:
define gcd_(a b)
let r {b % a}
if {r = 0} a gcd_(r a)
define-macro my-gcd()
apply gcd_ (args) 2
構文がマクロとどのように互換性があるかに注意してください。これは、Lisp構文を改善することを目的とした以前のプロジェクトの問題でした(WheelerとGloriaによって説明されています)。これは単なる砂糖であるため、新しい各式の最終的な形式はS式であり、マクロが処理される前に言語リーダーによって変換されます。したがって、マクロは特別な処理を必要としません。したがって、「読み取り可能なLisp」プロジェクトは、同像性、つまりLispが言語内のデータとしてコードを表現できるようにするプロパティを保持します。これにより、Lispは強力なメタプログラミング環境になります。