Common Lisp、SchemeをはじめとするLisp族全般のスレです
■前スレ
Lisp Scheme Part39
http://peace.2ch.net/test/read.cgi/tech/1408017352/
■テンプレ
ttp://wiki.fdiary.net/lisp/
■関連スレ
【入門】Common Lisp その11【質問よろず】
http://peace.2ch.net/test/read.cgi/tech/1411307361/
【Scheme】Schemeインタプリタ Mosh Part1【Lisp】
http://peace.2ch.net/test/read.cgi/tech/1272469779/
【Lisp】プログラミング言語 Clojure #3【JVM】
http://peace.2ch.net/test/read.cgi/tech/1380333808/
【魔法】リリカル☆Lisp【言語】
http://peace.2ch.net/test/read.cgi/tech/1183396621/
Lisp Scheme Part40 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2015/03/16(月) 13:45:52.92ID:EEYZoZ1i
491デフォルトの名無しさん
2016/12/08(木) 08:26:21.07ID:v+J3OHGS Anything.el再起動と革新的話題では?
492デフォルトの名無しさん
2016/12/15(木) 23:40:28.38ID:Z/98FfuD >>462
つ WebAssembly
つ WebAssembly
493デフォルトの名無しさん
2017/01/25(水) 16:59:16.79ID:IDNrNCFj494デフォルトの名無しさん
2017/01/25(水) 17:18:28.01ID:IDNrNCFj ところで R7RS-Large は Red Edition (データ構造に関する部分) がワーキンググループの Wiki に上がってる。
http://trac.sacrideo.us/wg/wiki/RedEdition
ほぼ SRFI から名前を変えてそのまま導入する形になる模様。
今のところ Sagittarius が積極的にサポートしている。
http://compassoftime.blogspot.jp/2017/01/r7rs-large.html
Larceny もライブラリの名前を除いてサポートできているとのこと。
http://trac.sacrideo.us/wg/wiki/RedEdition
ほぼ SRFI から名前を変えてそのまま導入する形になる模様。
今のところ Sagittarius が積極的にサポートしている。
http://compassoftime.blogspot.jp/2017/01/r7rs-large.html
Larceny もライブラリの名前を除いてサポートできているとのこと。
495デフォルトの名無しさん
2017/02/12(日) 07:48:00.04ID:fljd0HzI 並列処理で高速化できるlispってないの?
GPU使えるのはハーランだけ?
GPU使えるのはハーランだけ?
496デフォルトの名無しさん
2017/02/13(月) 18:51:16.49ID:tGnu7zYw497デフォルトの名無しさん
2017/02/13(月) 19:49:20.99ID:19NXxZ/v これはclojureの資料だけど、いまのところfloatをSSE2に投げるみたいな、なんでもGPUに投げるみたいな仕組みはないんじゃないかな。
http://dragan.rocks/talks/EuroClojure2016/clojure-is-not-afraid-of-the-gpu.html
http://dragan.rocks/talks/EuroClojure2016/clojure-is-not-afraid-of-the-gpu.html
498SCHEME餃子 ◆8X2XSCHEME
2017/02/13(月) 20:41:00.93ID:B8yZNpnE ある程度大きな単位でならバインディング作って投げてしまえばいいんだけど、
ちまちまやると境界を超える部分のオーバーヘッドで逆効果になったりするので、
本格的にやろうとすると処理系自体がサポートする必要はあると思う。
ちまちまやると境界を超える部分のオーバーヘッドで逆効果になったりするので、
本格的にやろうとすると処理系自体がサポートする必要はあると思う。
499デフォルトの名無しさん
2017/02/17(金) 09:12:11.58ID:SQwgU5dB Racketのプログラムを並列化して高速化したい。ハーランに書き直すのが1番手間かからずに高速化できるのだろうか
500デフォルトの名無しさん
2017/02/23(木) 05:43:04.17ID:hf6cZ/5o501デフォルトの名無しさん
2017/03/04(土) 17:46:48.41ID:ASS1Dwl9 『scheme手習い』読み始めた
この本自体はめっちゃ面白いけど実際に自分のPCでschemeを走らせる方法が全く分からないのはどうすれば
この本自体はめっちゃ面白いけど実際に自分のPCでschemeを走らせる方法が全く分からないのはどうすれば
>>501
goche を入れればよい
goche を入れればよい
503デフォルトの名無しさん
2017/03/04(土) 18:14:56.86ID:ASS1Dwl9504デフォルトの名無しさん
2017/03/04(土) 19:28:05.44ID:cw8QUsOc プログラミングGaucheはそろそろ次版が欲しい
505デフォルトの名無しさん
2017/03/05(日) 09:40:39.32ID:ZY1iiKPn506デフォルトの名無しさん
2017/03/05(日) 15:16:43.40ID:g3CQlQFl507デフォルトの名無しさん
2017/03/05(日) 18:35:17.08ID:PeNyQ7CN >>506
オッケー
オッケー
508SCHEME餃子 ◆8X2XSCHEME
2017/03/06(月) 19:02:32.45ID:4f//mV7K 個人的にはそろそろ R7RS (の処理系) を前提にしてもいいんじゃないかと思ってるが、
総合的な開発環境の便利さとしては Racket が優勝だわな。
少なくとも初心者にすすめられるものとしては。
総合的な開発環境の便利さとしては Racket が優勝だわな。
少なくとも初心者にすすめられるものとしては。
509デフォルトの名無しさん
2017/03/07(火) 15:34:16.05ID:d/UktTsb >>508
> 個人的にはそろそろ R7RS (の処理系) を前提にしてもいいんじゃないかと思ってるが、
R7RSはsmallの範囲は言語仕様書のドラフトが提出されたというのを何かで見た覚えがあるが
R6RSで巨大化した範囲に対応largeの部分の仕様書はドラフトでも出たのか?
あれがまとまるとは思えんのだが
それに処理系側もR7RSへの対処は結局はsmallだけへの対応で終わる…R6RSが処理系屋からほとんど無視されたように…のでは、と
個人的には予想している
そしてその予想が正しいならば、R5RS対応の処理系を使う前提で十分な気がする
(R7RSで言語仕様をsmall/largeの2階層モデルにした意図が、Come back! R5RS! Good bye R6RS! X-p にあるのは明らかだからね)
> 個人的にはそろそろ R7RS (の処理系) を前提にしてもいいんじゃないかと思ってるが、
R7RSはsmallの範囲は言語仕様書のドラフトが提出されたというのを何かで見た覚えがあるが
R6RSで巨大化した範囲に対応largeの部分の仕様書はドラフトでも出たのか?
あれがまとまるとは思えんのだが
それに処理系側もR7RSへの対処は結局はsmallだけへの対応で終わる…R6RSが処理系屋からほとんど無視されたように…のでは、と
個人的には予想している
そしてその予想が正しいならば、R5RS対応の処理系を使う前提で十分な気がする
(R7RSで言語仕様をsmall/largeの2階層モデルにした意図が、Come back! R5RS! Good bye R6RS! X-p にあるのは明らかだからね)
510はつみつ餃子 ◆8X2XSCHEME
2017/03/07(火) 15:59:23.09ID:Jusdeq18 >>509
Large の状況については >>494 の通り。
全部の議論が終わるのはまだかなり先のことになるだろうし、
処理系の対応がどうなるかはまだなんとも言えないところはあるのは確かだと思う。
でも、 R7RS Small については R5RS を少し拡張するにとどまったからこそ、
その程度の小さな差を導入することをためらわなくていいんじゃないかという意図だった。
R5RS でも十分といえば十分なのかもしれないけど
特にライブラリなんかは結局のところ R5RS 処理系でもそれぞれの処理系ごとに機構を持ってたりするし、
SRFI を使ったりするときに統一的な書き方ができた方が教える方もやりやすいよ。
Large の状況については >>494 の通り。
全部の議論が終わるのはまだかなり先のことになるだろうし、
処理系の対応がどうなるかはまだなんとも言えないところはあるのは確かだと思う。
でも、 R7RS Small については R5RS を少し拡張するにとどまったからこそ、
その程度の小さな差を導入することをためらわなくていいんじゃないかという意図だった。
R5RS でも十分といえば十分なのかもしれないけど
特にライブラリなんかは結局のところ R5RS 処理系でもそれぞれの処理系ごとに機構を持ってたりするし、
SRFI を使ったりするときに統一的な書き方ができた方が教える方もやりやすいよ。
511デフォルトの名無しさん
2017/03/07(火) 16:36:42.01ID:d/UktTsb512デフォルトの名無しさん
2017/03/27(月) 00:34:43.57ID:vvNcurYK ここはスレチかもしれんがGo言語の勉強兼ねてR7RS片手にScheme処理系組んでみようとしてるけどトークナイザ書くの面倒すぎて心折れそう、お前らどうやってコード書くモチベ維持してるの?
513デフォルトの名無しさん
2017/03/27(月) 11:59:36.16ID:rJ5GwHyl schemeレベルで面倒つったら他の演算子入りの言語じゃどうなるんだ
514デフォルトの名無しさん
2017/03/27(月) 12:19:08.00ID:wLrtvEW7 トークナイザなら特に変わらん
515はつみつ餃子 ◆8X2XSCHEME
2017/03/27(月) 13:04:02.91ID:X8O8C+77 >>512
最初から完全である必要はないよ。
数値を整数だけにして文字列や識別子のエスケープも全部省略くらいのものから始めたらいいと思う。
限定的にでも動くものが目の前にあればモチベーションを維持しやすい。
最初から完全である必要はないよ。
数値を整数だけにして文字列や識別子のエスケープも全部省略くらいのものから始めたらいいと思う。
限定的にでも動くものが目の前にあればモチベーションを維持しやすい。
516デフォルトの名無しさん
2017/03/27(月) 16:27:52.97ID:do2TA6Gp >>515
なるほど、とりあえず簡単なとこからやるか
なるほど、とりあえず簡単なとこからやるか
517デフォルトの名無しさん
2017/04/02(日) 12:22:30.38ID:aBxOBDdQ 通常のletのように使うだけでgensym済みのlet文を生成するマクロ用コードを作ったのですが、このような挙動をする関数名を教えてください。
(let ((foo (gensym))) `(let ((,foo ,x)) ...)
が
(my-let* ((foo x)) ...)
と書ける感じです。再発明でなく役立つのであればここにCC0で貼りたいです。
(let ((foo (gensym))) `(let ((,foo ,x)) ...)
が
(my-let* ((foo x)) ...)
と書ける感じです。再発明でなく役立つのであればここにCC0で貼りたいです。
518デフォルトの名無しさん
2017/04/02(日) 12:34:36.86ID:3lfrxhSb On Lisp に with-gensyms っていうマクロが載ってるけど、
それとは違う?
それとは違う?
519デフォルトの名無しさん
2017/04/02(日) 12:49:44.85ID:aBxOBDdQ with-gensymsではたぶんこうなると思います。
(with-gensyms (foo) `(let ((,foo ,x)) ...))
(with-gensyms (foo) `(let ((,foo ,x)) ...))
520デフォルトの名無しさん
2017/04/02(日) 13:06:11.52ID:aBxOBDdQ 突然死しないうちにとりあえず貼りますね。
アカウントは消すのでいいものであればbase64で書き残します。
ttps://gist.github.com/lla/f9244aefb7eee18db4cd
アカウントは消すのでいいものであればbase64で書き残します。
ttps://gist.github.com/lla/f9244aefb7eee18db4cd
521デフォルトの名無しさん
2017/04/02(日) 19:23:02.31ID:28FWzFad レキシカルスコープのletやlet*でgensym必要なの?
使い道が良く判らない
使い道が良く判らない
522デフォルトの名無しさん
2017/04/03(月) 10:05:01.53ID:+t4V64u5 こういう時に要ると思うのですが...。要りませんか?
ttp://www.sampou.org/scheme/t-y-scheme/t-y-scheme-Z-H-10.html#node_sec_8.2
ttp://www.sampou.org/scheme/t-y-scheme/t-y-scheme-Z-H-10.html#node_sec_8.2
523デフォルトの名無しさん
2017/04/03(月) 15:23:03.92ID:dRI+3qaq 要るよ
524デフォルトの名無しさん
2017/04/03(月) 21:22:49.93ID:e3RabMtG `((lambda (foo) ...) ,x)と展開すりゃ要らないんじゃないの
525デフォルトの名無しさん
2017/04/03(月) 21:45:51.66ID:hrRYx8PC schemeでは衛生マクロを使うので不要だと思います。
commonlispでも仕様が中途半端なので不要だと思います。
そのまま書くのと手間が変わらないですし。
commonlispでも仕様が中途半端なので不要だと思います。
そのまま書くのと手間が変わらないですし。
526デフォルトの名無しさん
2017/04/04(火) 12:16:18.07ID:ugpuQ2R8 バカにマクロは無理だと何度
527デフォルトの名無しさん
2017/04/04(火) 16:11:24.87ID:L5RxkvgF528デフォルトの名無しさん
2017/04/04(火) 16:15:12.41ID:BUhgl6Ma そもそもgensymがなんで必要なのかを理解しているのかという
530デフォルトの名無しさん
2017/04/04(火) 22:10:42.70ID:QobCLqKi >>527 once-only っていう定番マクロしらないの?
(defmacro square (x) (my-let* ((g x)) `(* ,g ,g)))
(defmacro square (x) (once-only (x) `(* ,x ,x)))
それは中途半端なonce-onlyの再発明なんよ
(defmacro square (x) (my-let* ((g x)) `(* ,g ,g)))
(defmacro square (x) (once-only (x) `(* ,x ,x)))
それは中途半端なonce-onlyの再発明なんよ
531デフォルトの名無しさん
2017/04/05(水) 11:30:15.85ID:must9X5J and や orって短絡評価な気がして>>527はもやもやする
それと副作用のある式を同一式に並べるのは未定義だった気がする
それと副作用のある式を同一式に並べるのは未定義だった気がする
532デフォルトの名無しさん
2017/04/05(水) 11:40:21.51ID:0wF5qf+D >>530
素敵です! ありがとうございます! これが探し求めていたものです。より良いものがあることを願っていました。
素敵です! ありがとうございます! これが探し求めていたものです。より良いものがあることを願っていました。
533デフォルトの名無しさん
2017/04/05(水) 11:59:09.52ID:FrHqCsnx >>531
確か評価順が未定義なだけ。
確か評価順が未定義なだけ。
534デフォルトの名無しさん
2017/04/05(水) 12:49:06.15ID:must9X5J ((a b c) d)の評価順序は
a b cの順序は決まってなくて(a b c)の後にdが評価されるのだけは保証されている。で合ってるよね?
もちろんマクロや特殊形式の引数は除外だけど>>527の展開結果は(a b c)と同じことになってる
さらに(or a b c)ならaがtrueの時点で評価打ち切りでb cは評価されない(短絡評価)
(or a b c)がマクロなら以下のように展開されないといけない
((lambda(x k) (if x x (k))) a (lambda() ((lambda(x k) (if x x (k))) b (lambda() c))))
a b cの順序は決まってなくて(a b c)の後にdが評価されるのだけは保証されている。で合ってるよね?
もちろんマクロや特殊形式の引数は除外だけど>>527の展開結果は(a b c)と同じことになってる
さらに(or a b c)ならaがtrueの時点で評価打ち切りでb cは評価されない(短絡評価)
(or a b c)がマクロなら以下のように展開されないといけない
((lambda(x k) (if x x (k))) a (lambda() ((lambda(x k) (if x x (k))) b (lambda() c))))
535デフォルトの名無しさん
2017/04/05(水) 12:51:42.98ID:must9X5J >a b cの順序は決まってなくて(a b c)の後にdが評価されるのだけは保証されている。で合ってるよね?
これ合ってないわ。評価されるからそれを見越して>>534の最後のように遅延評価を入れとくって話
もういいです。
これ合ってないわ。評価されるからそれを見越して>>534の最後のように遅延評価を入れとくって話
もういいです。
536デフォルトの名無しさん
2017/04/05(水) 12:59:10.45ID:must9X5J 評価されるから、じゃなくて評価の順序が決まってないから
それを見越して無引数lambdaを1つ挟む必要があるだった。
それを見越して無引数lambdaを1つ挟む必要があるだった。
537デフォルトの名無しさん
2017/04/05(水) 13:01:01.45ID:must9X5J 気持ち悪いからまとめると、
((a b c) d)のa b c dの評価順序は何も決まってないから気をつけてねって事。
((a b c) d)のa b c dの評価順序は何も決まってないから気をつけてねって事。
538デフォルトの名無しさん
2017/04/05(水) 15:11:50.69ID:I9ofuKtd 最初の要素を最初に評価しないとマクロかどうか分からないかと思ってたが、その前の段階でマクロかどうかを判断することができるらしいんで、仕様では決まってないのか
((begin (display "1st\n") +) (begin (display "2nd\n") 2) (begin (display "3rd\n") 3))
をchezとgaucheで評価したら
2nd
3rd
1st
5
って順番だった。guileやchickenだと
1st
2nd
3rd
5
って順番になる。
((begin (display "1st\n") +) (begin (display "2nd\n") 2) (begin (display "3rd\n") 3))
をchezとgaucheで評価したら
2nd
3rd
1st
5
って順番だった。guileやchickenだと
1st
2nd
3rd
5
って順番になる。
539はつみつ餃子 ◆8X2XSCHEME
2017/04/05(水) 16:19:09.69ID:Paj3QjV7 最適化や諸々の都合で、同じ処理系でも順序が変わることはあるので、
単純な事例だけでは処理系の性質を推し量ることは出来ない。
単純な事例だけでは処理系の性質を推し量ることは出来ない。
540デフォルトの名無しさん
2017/04/05(水) 17:06:07.45ID:0wF5qf+D (define-macro (my-once-only1 x . body)
(let1 tmp (gensym)
`(glet1 ,tmp ,x
(let1 ,x ,tmp ,@body) )))
(use srfi-1)
(define-macro (my-once-only vars . body)
(let ((names (map (lambda (_) (gensym)) vars)) )
`(glet* ,(zip names vars)
(let ,(zip vars names) ,@body)
) ))
念願のものが作れました…。これで心残りはありません。
(let1 tmp (gensym)
`(glet1 ,tmp ,x
(let1 ,x ,tmp ,@body) )))
(use srfi-1)
(define-macro (my-once-only vars . body)
(let ((names (map (lambda (_) (gensym)) vars)) )
`(glet* ,(zip names vars)
(let ,(zip vars names) ,@body)
) ))
念願のものが作れました…。これで心残りはありません。
541はつみつ餃子 ◆8X2XSCHEME
2017/04/05(水) 20:28:07.58ID:Paj3QjV7 Scheme でやるなら syntax-rules でやったほうが楽だと思うが。
542デフォルトの名無しさん
2017/04/06(木) 03:23:23.24ID:A4tBLGW+543デフォルトの名無しさん
2017/04/06(木) 07:25:30.75ID:/2aNxn9F544デフォルトの名無しさん
2017/04/06(木) 16:32:44.68ID:R/lK+iME やっとリスト処理に慣れてgensymであーだこーだしてる人にsyntax-rulesは敷居高いと思う
545デフォルトの名無しさん
2017/04/06(木) 16:36:20.16ID:sOUw0TpV syntax-rulesはR7RS眺めてもよくわからんかった
546デフォルトの名無しさん
2017/04/06(木) 18:46:00.39ID:b3KdhuXf むしろSchemeから学ぶとマクロ入門にはsyntax-rulesしか書いてなくてdefine-macro&gensym触る機会が無かった
547はつみつ餃子 ◆8X2XSCHEME
2017/04/06(木) 21:09:32.30ID:HwCzkOKu 伝統的マクロの方が動作モデルを想像しやすくはあるかもね。
548デフォルトの名無しさん
2017/04/13(木) 05:14:19.83ID:x8ZfQnJg Racketは死んだ
549デフォルトの名無しさん
2017/04/13(木) 16:03:04.54ID:RXvGitp8 >>546
> むしろSchemeから学ぶとマクロ入門にはsyntax-rulesしか書いてなくてdefine-macro&gensym触る機会が無かった
>>547
> 伝統的マクロの方が動作モデルを想像しやすくはあるかもね。
Schemeの場合、何でもありのマクロを排除して意味や動作を形式的に定義でき、
展開結果の正しさ(変数が展開したとたんに突然バインドされたりしない等)を保証できる範囲に留めたいという発想が
根底にあるからね
だからsyntax-rulesなどSchemeでの「マクロ」はあくまでも構文の拡張(カスタマイズ)のためなんだよね
つまり字句レベルを勝手に弄らせるとどんなトラブルでも起こし得るから勝手に弄らせたくたくない、
プログラマがお好みの構文を既存構文を使って定義して追加したいというならそれは許してあげよう
(例えばCみたいにwhile文…ループ条件の判定が最初に行われる構文…がある言語にrepeat〜until文を追加したいなら
許してあげように相当)というのがSchemeの基本的なスタンス
つまり、Schemeの場合はソースレベル(テキストレベルと言っても良い)で好き勝手な操作を許す本来のマクロ
(ソースコードレベルのメタプログラミング手段)でなくて、抽象構文レベルでの変換規則を定義し使用する範囲だけに
限定しているんだと考えれば良いと個人的には思ってるけどね
だから(メタ)プログラムの動きで理解するタイプの人(プログラマには多い、特に優秀な人ほど)にとっては
古典的なマクロのほうが却って理解しやすく、逆に理屈が好きで系統的に理解したがる(代わりにプログラムの腕は
さほどでないのが多い)人間にはSchemeの構文拡張のほうが理解しやすくそちらを好む人が多い
もっともsyntax-rulesとかを提案して実現した向うの連中はプログラミングの腕力も上級者以上ばかりだけどね
(でも殆どの凡人は、プログラミングの腕か理屈かの高々どちらかしか得意でない、まあだからこそ凡人なわけでして
どっちも両立できちゃったらGuy Steele, Jr.みたいになれちゃうよね)
> むしろSchemeから学ぶとマクロ入門にはsyntax-rulesしか書いてなくてdefine-macro&gensym触る機会が無かった
>>547
> 伝統的マクロの方が動作モデルを想像しやすくはあるかもね。
Schemeの場合、何でもありのマクロを排除して意味や動作を形式的に定義でき、
展開結果の正しさ(変数が展開したとたんに突然バインドされたりしない等)を保証できる範囲に留めたいという発想が
根底にあるからね
だからsyntax-rulesなどSchemeでの「マクロ」はあくまでも構文の拡張(カスタマイズ)のためなんだよね
つまり字句レベルを勝手に弄らせるとどんなトラブルでも起こし得るから勝手に弄らせたくたくない、
プログラマがお好みの構文を既存構文を使って定義して追加したいというならそれは許してあげよう
(例えばCみたいにwhile文…ループ条件の判定が最初に行われる構文…がある言語にrepeat〜until文を追加したいなら
許してあげように相当)というのがSchemeの基本的なスタンス
つまり、Schemeの場合はソースレベル(テキストレベルと言っても良い)で好き勝手な操作を許す本来のマクロ
(ソースコードレベルのメタプログラミング手段)でなくて、抽象構文レベルでの変換規則を定義し使用する範囲だけに
限定しているんだと考えれば良いと個人的には思ってるけどね
だから(メタ)プログラムの動きで理解するタイプの人(プログラマには多い、特に優秀な人ほど)にとっては
古典的なマクロのほうが却って理解しやすく、逆に理屈が好きで系統的に理解したがる(代わりにプログラムの腕は
さほどでないのが多い)人間にはSchemeの構文拡張のほうが理解しやすくそちらを好む人が多い
もっともsyntax-rulesとかを提案して実現した向うの連中はプログラミングの腕力も上級者以上ばかりだけどね
(でも殆どの凡人は、プログラミングの腕か理屈かの高々どちらかしか得意でない、まあだからこそ凡人なわけでして
どっちも両立できちゃったらGuy Steele, Jr.みたいになれちゃうよね)
550デフォルトの名無しさん
2017/04/13(木) 16:37:53.95ID:UOOoC4Ge syntax-rulesの動きがよくわからなくて理解できなかったけど古典的マクロなら単純で理解しやすかったな、準クォート使えば面倒でもなかったし(プログラムの腕はだめです)
551デフォルトの名無しさん
2017/04/13(木) 21:50:42.52ID:KIw0CyXw >>549 あくまでも構文の拡張のため
他のlispでもそうでしょ.具体的にそれ以外の他になにがある?
他のlispでもそうでしょ.具体的にそれ以外の他になにがある?
552デフォルトの名無しさん
2017/04/14(金) 01:29:59.73ID:ktX2OX7O >>551
他のLispに限らずマクロは構文の拡張と言えるほどの系統的な代物にはなってないでしょ
だからマクロを展開した途端にグローバルだったはずの変数が束縛されてローカルな変数に化けたりする(変数のキャプチャね)
つまり通常のマクロは(必要に応じて実行時と同じ計算も許して)ソーステキストという文字列データを処理しているだけ
それに対してsyntax-rulesなどに代表されるSchemeのは抽象構文上での操作とすることでテキストという文字でなく構文の句構造のレベルで扱い
変数のキャプチャなどを起こさないように保証するわけだ
ソースコードを文字データとして処理するのか句構造として処理するのかでは考え方も保証できる正しさや展開の安全性も全く違う
他のLispに限らずマクロは構文の拡張と言えるほどの系統的な代物にはなってないでしょ
だからマクロを展開した途端にグローバルだったはずの変数が束縛されてローカルな変数に化けたりする(変数のキャプチャね)
つまり通常のマクロは(必要に応じて実行時と同じ計算も許して)ソーステキストという文字列データを処理しているだけ
それに対してsyntax-rulesなどに代表されるSchemeのは抽象構文上での操作とすることでテキストという文字でなく構文の句構造のレベルで扱い
変数のキャプチャなどを起こさないように保証するわけだ
ソースコードを文字データとして処理するのか句構造として処理するのかでは考え方も保証できる正しさや展開の安全性も全く違う
553デフォルトの名無しさん
2017/04/14(金) 02:55:56.83ID:f5XItAeI554デフォルトの名無しさん
2017/04/14(金) 03:00:40.04ID:obKv6Nr0 Common lispにschemeのmatchマクロを移植したのないのでしょうか?
555デフォルトの名無しさん
2017/04/14(金) 07:39:01.84ID:a6xDhPFv さあ、わかんなくなってきました。
とにかくsyntax-rulesの方が高級で、実装がめんどくさくて、低機能で、とりあえずほとんどの用はたりる。
とにかくsyntax-rulesの方が高級で、実装がめんどくさくて、低機能で、とりあえずほとんどの用はたりる。
556デフォルトの名無しさん
2017/04/14(金) 20:02:05.16ID:E0l2Apap そのめんどくさいの一点だけでLISP系にsyntax-を導入する価値は微妙
パターンマッチだからLISPじゃなくていいわけよね
syntax-rule/caseを日本語で詳細解説した本とかWebページってない?
パターンマッチだからLISPじゃなくていいわけよね
syntax-rule/caseを日本語で詳細解説した本とかWebページってない?
557デフォルトの名無しさん
2017/04/14(金) 20:06:23.95ID:E0l2Apap なんだっけsyntax-rule/caseの他にもう2つぐらい別種があるんだよね
重複しないシンボル名の管理の観点では手間は同じだけど概念的にはより簡単な感じだったと思う
重複しないシンボル名の管理の観点では手間は同じだけど概念的にはより簡単な感じだったと思う
558デフォルトの名無しさん
2017/04/15(土) 09:36:50.92ID:MGc4G7Yt case は削除されなかった?他の2つも結局どうなったんだか
559はつみつ餃子 ◆8X2XSCHEME
2017/04/15(土) 11:21:48.74ID:7hkWD0i5 >>556
> そのめんどくさいの一点だけでLISP系にsyntax-を導入する価値は微妙
一概には言えない。
たとえば letrec のようなものをマクロで書こうとするとフォームを分解したり
衛生的にしたりする処理はいずれにしても必要なことで、
それを自動的にやってくれる syntax-rules だと簡単に書ける。
syntax-rules や syntax-case は言語のプリミティブな機能としては高級すぎるのは確かで、
これは低水準の部分でどのパラダイムを採用するかで意見が一致しなかった末の妥協案として
いきなり高級な機能を持ち込んだ結果。
参考: http://blog.practical-scheme.net/shiro?20100425-scheme-macro
実際の処理系では explicit renaming や syntactic closure を基礎に据えてその上に
syntax-rules や syntax-case のインターフェイスを実装している場合もよくある。
> そのめんどくさいの一点だけでLISP系にsyntax-を導入する価値は微妙
一概には言えない。
たとえば letrec のようなものをマクロで書こうとするとフォームを分解したり
衛生的にしたりする処理はいずれにしても必要なことで、
それを自動的にやってくれる syntax-rules だと簡単に書ける。
syntax-rules や syntax-case は言語のプリミティブな機能としては高級すぎるのは確かで、
これは低水準の部分でどのパラダイムを採用するかで意見が一致しなかった末の妥協案として
いきなり高級な機能を持ち込んだ結果。
参考: http://blog.practical-scheme.net/shiro?20100425-scheme-macro
実際の処理系では explicit renaming や syntactic closure を基礎に据えてその上に
syntax-rules や syntax-case のインターフェイスを実装している場合もよくある。
560デフォルトの名無しさん
2017/04/15(土) 15:50:40.85ID:HoujqO6s schemeだとread macroの定義ってどないなっとるん?
自分common lispとバージョンが上がるといつ消えるか解らないclojureのしか知らんのだけど。
自分common lispとバージョンが上がるといつ消えるか解らないclojureのしか知らんのだけど。
561はつみつ餃子 ◆8X2XSCHEME
2017/04/15(土) 16:38:57.94ID:7hkWD0i5 >>560
リードマクロについては Scheme の仕様には含まれないし SRFI にもないし、デファクトスタンダードといえるものもない。
処理系が独自にやっている場合はあるけど。
私見だが、 Common Lisp に比べて Scheme はモジュール化を強く意識していると思う。
R6RS でフェイズの制御について一応の考え方が確立したものの、
リーダの適用範囲をうまく制御するにはまた別の軸を持ち込む必要があるので厄介なのだと思う。
リードマクロについては Scheme の仕様には含まれないし SRFI にもないし、デファクトスタンダードといえるものもない。
処理系が独自にやっている場合はあるけど。
私見だが、 Common Lisp に比べて Scheme はモジュール化を強く意識していると思う。
R6RS でフェイズの制御について一応の考え方が確立したものの、
リーダの適用範囲をうまく制御するにはまた別の軸を持ち込む必要があるので厄介なのだと思う。
562デフォルトの名無しさん
2017/04/15(土) 18:36:19.85ID:HoujqO6s563デフォルトの名無しさん
2017/04/15(土) 19:13:45.64ID:zbZeczCO Racket はどうや?
564デフォルトの名無しさん
2017/04/15(土) 19:35:50.51ID:6k6YVb1i schemeのリードマクロってCL踏襲じゃまずい理由でもあるの?
健全とか関係なくね?
健全とか関係なくね?
566デフォルトの名無しさん
2017/05/20(土) 21:49:25.89ID:hZyWUkTA Lispの論文で英語表現とか定理の書き方みたいので参考になる論文ってどこらへんみればいいでしょう
567デフォルトの名無しさん
2017/05/20(土) 21:54:10.22ID:1QdXRE7A >>566
定理はともかく英語表現はRnRSの原本読んどけばいいんじゃないかな
後はこんなのとか
http://repository.readscheme.org/ftp/papers/ai-lab-pubs/AIM-353.pdf
wikipediaのScheme系の記事の参照元を読み漁るといいと思う
定理はともかく英語表現はRnRSの原本読んどけばいいんじゃないかな
後はこんなのとか
http://repository.readscheme.org/ftp/papers/ai-lab-pubs/AIM-353.pdf
wikipediaのScheme系の記事の参照元を読み漁るといいと思う
568デフォルトの名無しさん
2017/05/22(月) 19:02:01.63ID:qyIfdaRr RnRS は仕様書っぽい言い回しだけど論文と同じかなぁ、論文読む方に賛成
569デフォルトの名無しさん
2017/05/24(水) 08:06:22.98ID:HxetDgQ4 >>564
リードテーブルの状態によってプログラムの意味が変わってしまうのは不健全さを嫌うScheme的にはだめでしょ
リードテーブルの状態によってプログラムの意味が変わってしまうのは不健全さを嫌うScheme的にはだめでしょ
570デフォルトの名無しさん
2017/05/24(水) 15:27:40.12ID:jXaLafTB >>569 の主観なのかそれとも論文にまとまってたりするのか.
racket#!langはどうなる.
racket#!langはどうなる.
571デフォルトの名無しさん
2017/05/25(木) 19:06:27.53ID:XPkyG+P/ >>570
そもそもRacketはScheme的にだめでしょ
そもそもRacketはScheme的にだめでしょ
572デフォルトの名無しさん
2017/05/25(木) 21:07:52.50ID:1hi1bgKK わかったおまえの主観ってことな.あんがと.
573デフォルトの名無しさん
2017/05/26(金) 16:53:05.43ID:NdkbHKTg Chez Schemeの日本語ドキュメントないの〜?
574はつみつ餃子 ◆8X2XSCHEME
2017/05/27(土) 18:03:08.42ID:O+COb9Mx ない。
575デフォルトの名無しさん
2017/05/28(日) 00:02:44.20ID:k20WIr1s ちぇっ
576はつみつ餃子 ◆8X2XSCHEME
2017/05/28(日) 17:36:39.82ID:KnUhHSDN Chez Scheme について具体的に知りたいことがあればここで質問すれば簡単な回答くらいはつくかも?
577デフォルトの名無しさん
2017/05/30(火) 00:45:37.72ID:Dd0ZuLcv 最近のlisp webフレームワークで良いのって何でしょうか
578デフォルトの名無しさん
2017/05/30(火) 00:48:16.84ID:kWERrntF Kahuaなら知ってるが更新されてないっぽいし使ったことないからよくわからん
579はつみつ餃子 ◆8X2XSCHEME
2017/05/30(火) 02:45:46.19ID:Gds8xcWJ580デフォルトの名無しさん
2017/06/11(日) 12:44:37.67ID:QmG4H1RB 逆転ポインタなつい
ttp://qiita.com/kingshine/items/d74576886c067737ad18
ttp://qiita.com/kingshine/items/d74576886c067737ad18
581デフォルトの名無しさん
2017/06/22(木) 00:41:06.63ID:qjVInUD2 Common lispのnilとfalse区別しないの気持ち悪いけど
Schemeでまともな処理系もう残ってない感じして
Common Lisp に移住するしかない
Schemeでまともな処理系もう残ってない感じして
Common Lisp に移住するしかない
582デフォルトの名無しさん
2017/06/22(木) 00:49:51.73ID:GIlOn6Gc 何をもってまともと言うのか、Gauche使ってるけど普通に安定してるぞ
583はつみつ餃子 ◆8X2XSCHEME
2017/06/24(土) 01:00:13.24ID:Ma6ZsMvR584デフォルトの名無しさん
2017/06/29(木) 18:45:47.85ID:cCrWWcTS Scheme のこと好き? 忌む?
585デフォルトの名無しさん
2017/06/29(木) 22:55:19.10ID:S64gSu9X 忌マラン
587デフォルトの名無しさん
2017/07/02(日) 03:01:49.46ID:27xX9ykc 最速の処理系ってどれ?
588デフォルトの名無しさん
2017/07/02(日) 11:09:04.91ID:b45oz2aB Chez >>444
589デフォルトの名無しさん
2017/07/02(日) 17:50:09.29ID:27xX9ykc 最高の処理系ってどれ?
590デフォルトの名無しさん
2017/07/02(日) 17:58:15.58ID:WUsDB0eH 自作の処理系が最高、性能使い勝手を抜きにすれば
591デフォルトの名無しさん
2017/07/02(日) 20:22:47.00ID:27xX9ykc さぁ、行こう
■ このスレッドは過去ログ倉庫に格納されています
