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
458デフォルトの名無しさん
2016/08/24(水) 18:47:43.67ID:urM54ZXn .netはc#,f#に集約されているので、S式使った組み込みDSL向けか、replなどのユーティリティー系しか用途がない気はする。
最近はnotebook形式のツールが増えてきたので、そっちも限られてきた気はするが。
最近はnotebook形式のツールが増えてきたので、そっちも限られてきた気はするが。
459デフォルトの名無しさん
2016/08/24(水) 18:56:20.06ID:urM54ZXn .netはDLRが出た時に.net言語の実装増えたけど、利用者少ないし、ほとんどがメンテできてないんじゃないかな
JVMだと使える処理系としてkawa、abclもメンテされてるはず。
それとリッチ・ヒッキーは.netでscheme実装やってみたけど、意図的にclojureからjvmに移行したという記憶が。
clojureは組み込みデータ型がJVMに寄ってるので、cljsもclojureclrも組み込みのデータ型で苦労してるし、clrは特にサードパーティーのライブラリが対応してなくて苦労してる。
ただ、ニュートラルにするとshenとかFantomみたいにあんまり他の言語と相互利用できなくなる。
clrは、unity使えるけどスマホで使えないし、WPF対応させたりしてるけどクロス環境では使えないみたいな話も。
JVMは末尾再帰辛いけどindyやgraalvm+truffleみたいにネタが増えてて実装オタク向けの新しい題材が増えてるし、他のVMでも.netよりもerlangのvmや、llvmあたりの方がまだ活発なイメージがある。
JVMだと使える処理系としてkawa、abclもメンテされてるはず。
それとリッチ・ヒッキーは.netでscheme実装やってみたけど、意図的にclojureからjvmに移行したという記憶が。
clojureは組み込みデータ型がJVMに寄ってるので、cljsもclojureclrも組み込みのデータ型で苦労してるし、clrは特にサードパーティーのライブラリが対応してなくて苦労してる。
ただ、ニュートラルにするとshenとかFantomみたいにあんまり他の言語と相互利用できなくなる。
clrは、unity使えるけどスマホで使えないし、WPF対応させたりしてるけどクロス環境では使えないみたいな話も。
JVMは末尾再帰辛いけどindyやgraalvm+truffleみたいにネタが増えてて実装オタク向けの新しい題材が増えてるし、他のVMでも.netよりもerlangのvmや、llvmあたりの方がまだ活発なイメージがある。
460デフォルトの名無しさん
2016/08/24(水) 22:03:15.08ID:kzFjQi4C >>459
> clojureは組み込みデータ型がJVMに寄ってるので、cljsもclojureclrも組み込みのデータ型で苦労してるし、clrは特にサードパーティーのライブラリが対応してなくて苦労してる。
なんでそういう勘違いしてるのか気になるな
clojureの組み込みリテラルは数値、シンボル,キーワード、文字列、キャラクタ、list、vector、dictionary(map)とsetでCLRでも問題無い奴しか無いよ
> clrは、unity使えるけどスマホで使えないし、WPF対応させたりしてるけどクロス環境では使えないみたいな話も。
スマホはiOSが実行時評価禁止してるからunity上でのclojure.clrは制限があるのは事実だけど、これも誤解が入っていると思うぞ
> JVMは末尾再帰辛いけどindyやgraalvm+truffleみたいにネタが増えてて実装オタク向けの新しい題材が増えてるし、他のVMでも.netよりもerlangのvmや、llvmあたりの方がまだ活発なイメージがある。
JVMは末尾再帰を完全に保証できないからclojureのrecurが生まれたのだけど、順序間違ってない?
> clojureは組み込みデータ型がJVMに寄ってるので、cljsもclojureclrも組み込みのデータ型で苦労してるし、clrは特にサードパーティーのライブラリが対応してなくて苦労してる。
なんでそういう勘違いしてるのか気になるな
clojureの組み込みリテラルは数値、シンボル,キーワード、文字列、キャラクタ、list、vector、dictionary(map)とsetでCLRでも問題無い奴しか無いよ
> clrは、unity使えるけどスマホで使えないし、WPF対応させたりしてるけどクロス環境では使えないみたいな話も。
スマホはiOSが実行時評価禁止してるからunity上でのclojure.clrは制限があるのは事実だけど、これも誤解が入っていると思うぞ
> JVMは末尾再帰辛いけどindyやgraalvm+truffleみたいにネタが増えてて実装オタク向けの新しい題材が増えてるし、他のVMでも.netよりもerlangのvmや、llvmあたりの方がまだ活発なイメージがある。
JVMは末尾再帰を完全に保証できないからclojureのrecurが生まれたのだけど、順序間違ってない?
461デフォルトの名無しさん
2016/08/25(木) 03:01:28.74ID:EcGIN1F9 フォローありがとう。
unity+clojureclrってiosで動くようになったのか。
javaの規格では末尾再帰最適化はないけど、
ibmのj9 vmでは、末尾再帰最適化してくれる。
unity+clojureclrってiosで動くようになったのか。
javaの規格では末尾再帰最適化はないけど、
ibmのj9 vmでは、末尾再帰最適化してくれる。
462デフォルトの名無しさん
2016/09/12(月) 17:44:10.20ID:qDbI1d2i S式はいつまで日陰なのか
なんでXMLは普及したのか
XMLの前身のHTMLはなぜS式ではなかったのか
無茶苦茶汚くなるスクリプト埋め込みやCSSとかをなぜ苦労してまで使うのか
そんなにS式が嫌か
なんでXMLは普及したのか
XMLの前身のHTMLはなぜS式ではなかったのか
無茶苦茶汚くなるスクリプト埋め込みやCSSとかをなぜ苦労してまで使うのか
そんなにS式が嫌か
463デフォルトの名無しさん
2016/09/12(月) 18:18:05.53ID:q3qEXh1t 手習いの推薦図書で興味を惹かれたんだけど
物まね鳥きちんと読むと、どうなるの?
Lispをやるのにどんなご利益があるの?
物まね鳥きちんと読むと、どうなるの?
Lispをやるのにどんなご利益があるの?
464デフォルトの名無しさん
2016/10/08(土) 11:21:36.68ID:fiaM9vLl >そんなにS式が嫌か
はい
はい
465デフォルトの名無しさん
2016/10/08(土) 12:09:44.18ID:1yrGmOsT 括弧の対応わかんなくてインデントで対処したら
だったらインデントあれば括弧いらなくね?ってなって
いまでは立派なHaskeller
だったらインデントあれば括弧いらなくね?ってなって
いまでは立派なHaskeller
466デフォルトの名無しさん
2016/10/08(土) 17:17:37.57ID:4LO02OW+ ごめんなさい、殺さないで
467デフォルトの名無しさん
2016/10/08(土) 20:59:11.69ID:MxYncUTD にわかHaskellerだけど立派ではないだろ盛るのもいいかげんにしろ
468はちみつ餃子 ◆8X2XSCHEME
2016/10/08(土) 21:05:09.85ID:vq0777oC Gauche 0.9.5 出たよー
469デフォルトの名無しさん
2016/10/09(日) 01:16:51.64ID:0XqPv4tB いつまで0.9彷徨ってんだよ
そんなハードル高く設定して何になる
そんなハードル高く設定して何になる
470デフォルトの名無しさん
2016/10/10(月) 23:42:14.48ID:goEL863s 今のバージョンを何と呼ぼうと手に入る機能は変わらないのに、バカなの?
471はちみつ餃子 ◆8X2XSCHEME
2016/10/13(木) 14:55:07.45ID:j1zwT3+2 ナンバーが 1 未満だと未完成という印象になっちゃうのかな?
バージョンナンバーの振り方はそれぞれのプロジェクトでのポリシーで決める話。
Gauche の場合はこういうマイルストーンが設定されてる。
http://practical-scheme.net/gauche/devinfo-j.html
たぶん作者が考える一通りの機能がこれだけということではあるんだろうけど、
バージョン 0.9.5 は 0.9.5 という完成品だし、 1 を過ぎたからってそれで終わりってわけでもない。
所詮は一区切りの目安。
バージョンナンバーの振り方はそれぞれのプロジェクトでのポリシーで決める話。
Gauche の場合はこういうマイルストーンが設定されてる。
http://practical-scheme.net/gauche/devinfo-j.html
たぶん作者が考える一通りの機能がこれだけということではあるんだろうけど、
バージョン 0.9.5 は 0.9.5 という完成品だし、 1 を過ぎたからってそれで終わりってわけでもない。
所詮は一区切りの目安。
472デフォルトの名無しさん
2016/10/13(木) 19:48:53.96ID:PkuNke6K セマンティックバージョニングみたいなのがあるし、最近だと1.0を出さないのは個人で開発してるとおおいのかな?
昔はtexみたく収束していく系やってる人は多かったけど、やっぱり個人かね。
昔はtexみたく収束していく系やってる人は多かったけど、やっぱり個人かね。
473デフォルトの名無しさん
2016/10/14(金) 01:22:40.11ID:XWvLcjKQ というかそのドット別に小数点じゃないし・・・
混同するのは間違いないのでいっそコロンやセミコロンで区切ったほうが理解しやすいかもしれない
混同するのは間違いないのでいっそコロンやセミコロンで区切ったほうが理解しやすいかもしれない
474デフォルトの名無しさん
2016/10/14(金) 10:16:22.13ID:vLfiDK4O いや、本来は小数点だったよ
「0.9の次だけどまだ未完成だから0.10にしたよー」とかやらかしたから信用を失っただけで
「0.9の次だけどまだ未完成だから0.10にしたよー」とかやらかしたから信用を失っただけで
475デフォルトの名無しさん
2016/10/14(金) 18:32:55.43ID:7nOZHdhP >>474
具体的なソフト名挙げろや。普通 0.91 とかに行くだろ。
具体的なソフト名挙げろや。普通 0.91 とかに行くだろ。
476デフォルトの名無しさん
2016/10/14(金) 19:07:47.56ID:zN4aic2C 社内業務ソフトですらバージョン番号が0.xなのってざらだと思うのだけどなぁ
1.0ってほぼこれで完璧的な意味で付ける会社もあるだろうし
(売り物のくせにVer 3の倍数から完璧の会社もあるけど:老舗のOS屋さんとか)
なお、1.0以降になるとちょっと仕様が変わっただけでメジャーバージョンが上がる会社もあるけど(猫科の動物の名前付ける所とか:Ver 9までクソだったような気もするけど)
ようするにバージョン番号って作者が自由に付ける物じゃないの?
1.0ってほぼこれで完璧的な意味で付ける会社もあるだろうし
(売り物のくせにVer 3の倍数から完璧の会社もあるけど:老舗のOS屋さんとか)
なお、1.0以降になるとちょっと仕様が変わっただけでメジャーバージョンが上がる会社もあるけど(猫科の動物の名前付ける所とか:Ver 9までクソだったような気もするけど)
ようするにバージョン番号って作者が自由に付ける物じゃないの?
477はちみつ餃子 ◆8X2XSCHEME
2016/10/14(金) 19:53:07.72ID:njZqyYby >>476
自由でいいけど、ひとつのソフトは一貫した (わかりやすい) ルールを持っておいてほしくはあるね。
自由でいいけど、ひとつのソフトは一貫した (わかりやすい) ルールを持っておいてほしくはあるね。
478デフォルトの名無しさん
2016/10/14(金) 21:35:46.95ID:5nO9NwFR まあ linux もいきなり 3.x になったり,よく分からない理由で 4.x になったり
479デフォルトの名無しさん
2016/10/14(金) 21:53:32.26ID:SkqOUpcH Windowsも10になったけど中身は8なんだろ?
480デフォルトの名無しさん
2016/10/15(土) 10:14:21.43ID:C9liqmNs 0-originでバージョン付けたっていいじゃない。
481デフォルトの名無しさん
2016/10/15(土) 21:27:25.53ID:bOlsxR9R 0.x.yは劇的な変更があっても泣くなよ、という意味合いだと思っている
個人的にはセマンティックバージョニングを付けてもらえるとありがたい
1.x.yなら、機能追加でxを1つ増やして、バグ修正でyを1つ増やすってやつ
0.a.bは開発途中だから後方互換性は無くてもいいので、開発者が試行錯誤しているうちは1未満だとはっきり分かる
firefoxやchromeの馬鹿みたいなバージョン上げはマーケティングの意味合いが強くて好きになれない
個人的にはセマンティックバージョニングを付けてもらえるとありがたい
1.x.yなら、機能追加でxを1つ増やして、バグ修正でyを1つ増やすってやつ
0.a.bは開発途中だから後方互換性は無くてもいいので、開発者が試行錯誤しているうちは1未満だとはっきり分かる
firefoxやchromeの馬鹿みたいなバージョン上げはマーケティングの意味合いが強くて好きになれない
482デフォルトの名無しさん
2016/10/15(土) 22:15:44.10ID:pvROaeUb つーても実際非互換変更頻繁に入るから厳格に管理する意味ないだろ
483はちみつ餃子 ◆8X2XSCHEME
2016/10/16(日) 02:21:56.19ID:5wsvLL7T 仕様バグの修正なんかだと、バグ修正でもあるし、非互換な変更でもある。
ライブラリのバージョンにセマンティックバージョニングを採用した場合、
パッチバージョンの変更があったときにそのライブラリを使うアプリケーションが本当に正しく動くのかは
厳密にいえばライブラリの個別のバージョンを確認しないとわからんだろ。
あまりあてにならない。
ライブラリにバグがあってもそのバグの挙動に依存しているアプリケーションだってありうるわけで。
目安としてセマンティックバージョニングを導入するのは賛成だけど、厳密にしきれない部分はどうしてもあるわな。
そこらへんは柔軟に対処するしかしゃあねぇべ。
ライブラリのバージョンにセマンティックバージョニングを採用した場合、
パッチバージョンの変更があったときにそのライブラリを使うアプリケーションが本当に正しく動くのかは
厳密にいえばライブラリの個別のバージョンを確認しないとわからんだろ。
あまりあてにならない。
ライブラリにバグがあってもそのバグの挙動に依存しているアプリケーションだってありうるわけで。
目安としてセマンティックバージョニングを導入するのは賛成だけど、厳密にしきれない部分はどうしてもあるわな。
そこらへんは柔軟に対処するしかしゃあねぇべ。
484デフォルトの名無しさん
2016/10/16(日) 09:37:20.54ID:PjXU2mUU >>482はJSブラウザエンジンの話な
何にしても各言語なりの界隈の慣習に則ればいい
何にしても各言語なりの界隈の慣習に則ればいい
485デフォルトの名無しさん
2016/10/16(日) 18:47:56.29ID:dK/+e+o+486デフォルトの名無しさん
2016/10/17(月) 06:02:40.67ID:IeaGZ3RQ そういうことにしちゃっただけで、実質8.xx(6.xx)みたいなもんでしょ
487デフォルトの名無しさん
2016/11/15(火) 14:34:16.46ID:rex6X+v0 http://lipn.univ-paris13.fr/~bennani/CSRank.html
コンピュータ関連国際会議ランキングをlispで検索すると
European Lisp Workshop
しかなかった
コンピュータ関連国際会議ランキングをlispで検索すると
European Lisp Workshop
しかなかった
488デフォルトの名無しさん
2016/11/15(火) 22:07:24.81ID:Ei/g+r4v https://en.m.wikipedia.org/wiki/International_Conference_on_Functional_Programming
時代の流れにより96年にFPCAとLFPがICFPに置き換えられた。
時代の流れにより96年にFPCAとLFPがICFPに置き換えられた。
489デフォルトの名無しさん
2016/12/07(水) 03:48:27.70ID:tATsD5IS490デフォルトの名無しさん
2016/12/07(水) 10:57:02.71ID:IYOLLYww 何か革新的な話題無いの?
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つぐらい別種があるんだよね
重複しないシンボル名の管理の観点では手間は同じだけど概念的にはより簡単な感じだったと思う
重複しないシンボル名の管理の観点では手間は同じだけど概念的にはより簡単な感じだったと思う
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… [BFU★]
- 高市早苗首相。財務省の経済対策草案を「しょぼすぎる」と一刀両断し自らテコ入れ [バイト歴50年★]
- 立憲・野田代表が主張 台湾有事答弁で「質問者批判は筋違い」「答弁がおかしい」「高市総理迎合のネット世論は危険」★4 [♪♪♪★]
- 日中関係悪化で「日本からもうすぐパンダがいなくなる」 中国SNSでトレンド1位に★2 [♪♪♪★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 【旧統一教会】年度内に解散命令請求に結論 教団は最終主張書面を東京高裁に提出 [1ゲットロボ★]
- 高市早苗が中国に喧嘩売ってるのってDBで例えるとヤムチャがフリーザを挑発してるみたいな感じ? [522666295]
- 【高市悲報】中国「国連安保理の許可なしに日本を攻撃可能だ」 [115996789]
- 【実況】白銀ノエルと博衣こよりのえちえちパワフルプロ野球
- 【悲報】高市さん「つい言い過ぎた」 [771977901]
- 【速報】高市早苗「答弁撤回はしない」経済制裁へ★2 [931948549]
- 【んな専🏡】ルーナイトたち~1週間お疲れ様なのらぁ~(・o・🍬)🏰
