Schemeの開発日誌、その他雑多なことをつづってます。365参加エントリ)SRFI-11は多値を扱う構文です。このSRFIではlet-valuesとlet*-valuesという構文を提供します。多値を扱う構文といえばすでにSRFI-8を紹介していますが、こちらは構文の名前がもう少しだけ直感的です。R6RS/R7RSに慣れ親しんだ方なら既に知っているかと思いますが、以下のように使います。3)letのように直感的に多値の束縛が可能になります。これはreceiveにもいえるのですが、処理系によっては多値の実装をこれらの構文で行いcall-wit-valuesを単なる手続きにしているものもあります。そのような処理系では構文で束縛する方がコストが安いことが多いです*1。今回はSRFI-11を紹介しました。*1:例えばSagittariusでcall-with-valuesを使うと必ずconsumer手続きに渡される引数がパックされるのでメモリの消費が多少大きくなります。procedureもしくはconsumer手続きがlambdaを使って書かれている場合インライン展開されずに手続きが必ず生成されます。多値を多用する際に性能を出すにはlet-valuesもしくはreceiveを使う必要があります。Mekei人生の選択肢で、どこか変わった選択をしたらしく、日本からオランダへ移住。写真は飼い猫ではありません。猫飼いたい・・・Twitterはじめました。アカウントは@tk_ripleです。