よく見たらマニュアルに書いてあった
http://wiki.call-cc.org/man/5/Modules
> Interface names use a distinct global namespace. Interfaces defined inside modules are not visible outside of the module body.
よく見たらマニュアルに書いてあった
http://wiki.call-cc.org/man/5/Modules
> Interface names use a distinct global namespace. Interfaces defined inside modules are not visible outside of the module body.
仕事しなきゃ…
best way ではなさそうだけど、これそうするしかないんか…
https://stackoverflow.com/questions/53328748/how-to-export-interface-with-chicken-scheme
srfi-19 で深夜0時からの経過秒数を得る方法をずっと探してた。
Chicken Scheme の srfi-19 限定だけど make-duration を使うのが一番マシそう。
(let ((d (current-date)))
(make-duration #:hours (date-hour d) #:minutes (date-minute d) #:seconds (date-second d)))
Chicken Scheme の apropos なんかデフォルトだと macro を検索範囲に入れてくれないのあせるから困るな。
これで探してるマクロないってなるとはまりそう。気をつけよ。
Chicken Scheme の下記マニュアルにだいたい目を通した。
実用的でいい感じという感想。
実際に使っていくには eggs からのインストールも必要ですぐに必要になるのは srfi-19 かな。chicken 組み込みで入っている srfi も結構あるみたいなのでそこは気をつける。
ながらく Racket と Guile をつかってきたので syntax-case 系列のものに満足していた気がしたけど、S 式の変換だと思いたいのにそうなっていないという不満があったことを今思い出した。
ir-macro-transformer から渡された compare で比較しないといけない理由完全に理解した。定義元の環境の識別子じゃないとダメだよってしたいからか。
Common Lisp みたいに関数と変数の名前空間が分かれていることと package によって分かれているからだいたいOKみたいな感じではないので、Scheme で正しくマクロを書くときはこのあたりのことをよく考えないといけない。
explicit renaming macro の裏みたいな感じだと思うのだけど、大抵の場合全部 rename したいとなると思うので implicit renaming macro の方がうれしいイメージ。
マクロ展開時に計算ができる衛生的マクロとしてはやはり implicit renaming macro が一番いいと思ってる。やっぱり Lisp のマクロを書く側の気持ちとしては S 式の変換で済ませたいところがあり、syntax-case はなんかよく分からんものを勉強しないといけなくてつらいと思っている。
マクロ展開時に式を評価する能力のあるマクロのことを何て呼ぶのか探してる。
Scheme の識別子の事情的に単純にS式の変換のマクロだと困るので、その対策をしたものが衛生的マクロなので、 implicit renaming macros は衛生的マクロ。
自分が一番いいと思っている非衛生的マクロきた。
ユーザーインターフェース的に一番わかりやすいしシンプルでいいと思ってる。
http://wiki.call-cc.org/man/5/Module%20(chicken%20syntax)#implicit-renaming-macros
Chicken Scheme の sort モジュールにトポロジカルソートが入っていたので勉強した。依存関係のあるタスクに着手するときに便利そう。
安心して使ってよさそう。
メルセンヌツイスターとだいたい同じもので、ちょっとばらつきの偏りを改善したものだと理解した。
後発のもっといいやつなのかこれ。
(chicken random) では Well という乱数生成器を使っているらしいのだけど、なにそれとなっている。メルセンヌツイスターじゃないのか。
Chicken Scheme についての勉強を進めると場合によっても C を書いてもいいかなというモチベーションがわいてきていいな
無意識にネイティブをネイティヴと書いていたことに気づいた…
Lisp と自由ソフトウェアと行動分析学が好きです。自分専用のマストドンサーバーを運用しています。Typed Racket や Coalton のような型のついている Lisp や、自動定理証明器の ACL2、GNU Guix System に興味があります。いまは GNU Guile でのプログラミングがメインです。生活リズムの安定のため、深夜 02:00 から 10:00 までの間はアカウントロックをかけています。その間は何も反応しません。
076萌SNS is a social network, courtesy of 076. It runs on GNU social, version 2.0.2-beta0, available under the GNU Affero General Public License.
All 076萌SNS content and data are available under the Creative Commons Attribution 3.0 license.