加算+はもともと、引数を複数取ることが出来るので、関数を定義するまでもなく、下の画面だけで合計が出ます。関数の名称も変更できます。追加かも知れません。同じような機能のaddを作れるかやってみましたが、引数が2個だけしか出来ませんでした。何故?
加算の他、乗算も引数は複数取ることが出来ます。
減算、除算も複数の引数を取ることが出来ます。
有るサイトに、円柱の体積問題が有ったので、やってみました。底面積x高さで、答えは出ます。teimensekiはcircle_areaの別名でいけますね。bottomはcylinder_vol2の内部だけで使えるローカル変数のようです。
基本的には次のように書きます。
(define (add . x)
(apply + x))
あるいは
(define add
(lambda x
(apply + x)))
Racket/Schemeでの可変長引数はdefineのsyntax-sugarだと . x と書き、ドット以降に入ってきた引数は全部リストとして纏められます。
apply は関数をリストに適用する高階関数ですね。
同様に、ラムダ式の場合、
lambda x
と仮引数が括弧を伴わないと可変長引数だと解釈されます。
そうですね。
それで言うとRacketはもうSchemeではないです。
Pascalで言うDelphiの立ち位置ですね。
(ただし、isamさんが今使ってるR5RSはSchemeですが、【言語】->【言語の選択】で「The Racket Languageにした方が本当は良いでしょう)
主なScheme処理系だと
Guile(R5RS): https://www.gnu.org/software/guile/
Chicken Scheme(R5RS): https://www.call-cc.org/
Chez Scheme(R6RS): https://github.com/cisco/ChezScheme
MIT-Scheme: https://www.gnu.org/software/mit-scheme/
Chibi Scheme(R7RS): https://synthcode.com/wiki/chibi-scheme
Gambit Scheme(R5RS): https://github.com/gambit/gambit
Scheme48(R5RS): https://s48.org/
Gauche(R7RS): https://practical-scheme.net/gauche/index-j.html
Sagittarius(R7RS): https://github.com/ktakashi/sagittarius-scheme
なんかがあります。
RnRSのnが大きいほど、最新改訂版に従ってる、って事ですが、事実上、今のトコ、R5RSがいまだにデファクトスタンダードではありますね。
R7RSは、キャッチアップしてる処理系(Gauche)もありますが、どっちかっつーと新規参入組が実装してるケースが多いです。
ここに挙げた処理系は「代表的」なモノですが、元々Schemeの仕様書は歴史的には100ページ以下、と言う「薄い」仕様書な事もあり、個人で実装する人が多く、これら以外にも星の数程実装が存在してる、って言って良いとは思います。
Linuxのディストリビューションのイメージかと思ったんですが、それ以上の分裂ですね。Linuxでもここまで多くないでしょう。
DrRacketで言語を「The Racket Language」にした場合、R5RSと同じ感覚で書いて構わないんですか?
構いません。
むしろ、昔の旧PLT Scheme時代だとR5RSでも機能追加があったんですが、今のRacketだと完全に素のR5RSで、便利ライブラリ(SRFI)を使うのさえ難儀します。
よっぽどの理由がなければ、RacketでR5RSやR6RSは使わない方が良いでしょう。