トップページ⇒tech
994コメント303KB

Lisp Scheme Part39

■ このスレッドは過去ログ倉庫に格納されています
0001はちみつ餃子 ◆8X2XSCHEME 2014/08/14(木) 20:55:52.61ID:o+vsYevq
Common Lisp、SchemeをはじめとするLisp族全般のスレです

■前スレ
Lisp Scheme Part38
http://peace.2ch.net/test/read.cgi/tech/1391252139/

■テンプレ
ttp://wiki.fdiary.net/lisp/

■関連スレ
【入門】Common Lisp その10【質問よろず】
ttp://toro.2ch.net/test/read.cgi/tech/1361341876/
【Scheme】Schemeインタプリタ Mosh Part1【Lisp】
ttp://toro.2ch.net/test/read.cgi/tech/1272469779/
【Lisp】プログラミング言語 Clojure #3【JVM】
http://toro.2ch.net/test/read.cgi/tech/1380333808/
【魔法】リリカル☆Lisp【言語】
ttp://toro.2ch.net/test/read.cgi/tech/1183396621/
0446デフォルトの名無しさん2014/12/18(木) 22:51:18.41ID:DAuXzDKB
evalもなにも、nil!っていう(マクロ展開用の)関数にコード生成させて、それを(nil! ...)の現れた場所に埋め込むのがマクロ展開器の仕事でしょう
0447デフォルトの名無しさん2014/12/19(金) 00:29:28.98ID:8jf/i4w+
>>443
ちょっとなにいってるかわかんない
0448デフォルトの名無しさん2014/12/19(金) 03:26:43.29ID:upYjIo/Z
前処理としてチューリング完全な手続きが使えたらいろいろできるよね、てのが Lisp のマクロ。
で、そのマクロ用の言語として Lisp をそのまま流用するのが伝統的マクロのアプローチだけど、
一方で R5RS Scheme みたいにマクロ用の独自言語を用意するというアプローチもある。

>>445
別にマクロ手続きをコンパイルして実行してもいいのよ?
0449デフォルトの名無しさん2014/12/19(金) 04:04:17.00ID:mNsxWZGv
read 時にも結局evalが必要なんだっけ
0450デフォルトの名無しさん2014/12/19(金) 12:56:51.95ID:o138/K/4
>>448
やっぱり伝統的な方法でやるならevalかインタラクティブなコンパイル処理を用意しないとだめか
副作用の無い関数は展開したいからevalが妥当かな
0451SCHEME餃子 ◆8X2XSCHEME 2014/12/19(金) 16:37:56.84ID:Jd94yde9
R5RS のマクロはある種の独自言語なのは確かだけど、
低水準マクロにどういう方式を採用すべきかで合意できなかったから
不本意ながらとりあえず合意できる範囲でインターフェイスを決めたものであって、
あれが Scheme 的なアプローチってわけじゃないんだよ。
0452デフォルトの名無しさん2014/12/19(金) 17:06:34.01ID:OgBatUX1
ありゃ仕方なくやったって感じだな
Cのプリプロセッサマクロの豪華版
0453デフォルトの名無しさん2014/12/19(金) 17:54:12.96ID:bX2RZBOL
健全性は理念としてはわかるが、その実現のために
展開器がコンパイラ並みの大きさになっていくのはいかがなものか?
バグのない完全な展開器は現存するのか?
0454デフォルトの名無しさん2014/12/19(金) 19:51:32.57ID:2wM4VZiR
R7RSにはmacroexpandが無い。
どうやってマクロをデバッグするんだ?
0455デフォルトの名無しさん2014/12/22(月) 19:02:05.87ID:AjGfN6zS
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3A%E5%BE%AA%E7%92%B0%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E8%AA%AD%E3%81%BF%E6%9B%B8%E3%81%8D
にある
(#0=(a . b) . #0#)
は循環リストではないのでは?
0456デフォルトの名無しさん2014/12/22(月) 19:17:19.21ID:kX1Hiu3z
そうですよ。
0457デフォルトの名無しさん2014/12/22(月) 19:20:13.28ID:j5bAC/Q+
> 循環や共有構造を持つS式
0458デフォルトの名無しさん2014/12/22(月) 19:22:42.01ID:ghZKV2ZQ
#n# #n=の話をしてるだけで循環かどうかは重要じゃないんじゃ
0459デフォルトの名無しさん2014/12/23(火) 06:56:15.61ID:7FgN1VNX
トップページに循環リンクを張っとくとロボ避け用になるね
0460デフォルトの名無しさん2014/12/23(火) 13:13:19.47ID:+r8FjnMV
lisp advent calendar
投稿しないなら予約するなよお
0461デフォルトの名無しさん2014/12/23(火) 23:21:18.03ID:CZ3D7Ufg
寄稿者の集まりも悪いしそんな楽しみにしてるやつがいるようなカレンダーでもなかったと思うが
0462デフォルトの名無しさん2014/12/24(水) 00:12:59.43ID:e2VpCcn0
殺伐とするのはgoの役目だから
0463デフォルトの名無しさん2014/12/25(木) 21:12:53.02ID:X5xaJ3tH
括弧打つときの左shiftキーで小指が痛い
ctrlは変換無変換に割り当ててるから大丈夫だけどみんなは小指痛くならないの?
0464デフォルトの名無しさん2014/12/25(木) 21:35:41.32ID:EL6gBj3v
脱力が重要、ピアノ弾きにきいてごらんよ
0465デフォルトの名無しさん2014/12/25(木) 21:58:13.43ID:PFMshOy4
>>463
emacs使ってるならPCの変換とかMacのかなキーを開き括弧にすると良いんじゃ無いの
閉じるのはparedit任せ
つかキーボードの最下段ってなんであんなに不便な割り当てなんだろね?
0466デフォルトの名無しさん2014/12/25(木) 23:11:25.18ID:CjjuayPA
>>463
ギターとピアノで鍛えてるからか、痛くなったことがない
0467デフォルトの名無しさん2014/12/25(木) 23:20:06.50ID:bRuwx3hH
小指が痛くなるもやしっこは自分だけだったのか
shiftキーを親指で押せる位置にするのが一番早いかな
paredit便利っぽいけど小指の件とはあまり関係無さそう
0468デフォルトの名無しさん2014/12/25(木) 23:24:53.41ID:VJozxMYe
>>467
コントロール+8にすれば?
0469デフォルトの名無しさん2014/12/26(金) 00:02:19.89ID:sFMmMZhn
>>463
俺は親指で押してるが根本的な解決とは言いがたい
0470デフォルトの名無しさん2014/12/26(金) 07:12:03.29ID:ZF5Prlhw
日常的にキーボードを打っていれば必要な筋肉はつくと思うけど。

なんならギタリストみたいに指の筋トレでもすれば?
0471デフォルトの名無しさん2014/12/26(金) 07:19:14.79ID:Ymt/Ki/9
個人の指の長さ、筋肉の使い方、キーボードの高さや配置、いろいろ関係があるからなぁ。
どうすればうまく使えるか、微調整していくのがいいと思う。enjoy!
0472デフォルトの名無しさん2014/12/26(金) 11:54:23.23ID:0Z1WSbyg
ハノンやろうか
てかピアノ弾き多いな
0473デフォルトの名無しさん2014/12/26(金) 14:48:40.07ID:s2xSvg8v
俺は津軽三味線だけどな
なんで左手の小指は使わん!
0474デフォルトの名無しさん2014/12/26(金) 19:09:42.71ID:X4m3180h
キーボードを押すときそこまでキッチリ押し込むとtyping injuryに成りやすい。
キーのスイッチが押し初めの方に有るキーボードを使って底付きしないように、
指の腹で押す。英語だとtyping injuryでぐぐると一杯情報有るのに
日本語だとこの手の情報あんまりないよね。。。。俺の探し方が悪いのか??
0475デフォルトの名無しさん2014/12/26(金) 20:21:33.27ID:0m+CPJzh
まあ、マジレスすると左シフトでなんたらって
底づきさせてるんじゃないのか?
癖を直すのとクソキーボード変えるべきじゃないのか
0476デフォルトの名無しさん2014/12/26(金) 20:22:37.55ID:XBzLiayq
>>474
あっちはタイプライターが結構前から普及してたけど、日本だとその頃は習字が該当するから。
文字書くときの姿勢関係だとペンクラブとかでも話題があるから文化的違いじゃないの?
PC普及でこれから事例が増えるといっぱい出てくる希ガス
0477デフォルトの名無しさん2014/12/26(金) 20:25:58.68ID:0m+CPJzh
にほんじんは意外なやつまでブラインドできんやつ多いしな
俺が教えた学生は全員ブラインド訓練からやらせた
文句言う男子はタコ部屋で俺のために稼がせる
文句言う女子学生は文句言えないようにおれの云々棒で口を塞ぐ
という硬い決意で望んだが、みんな真面目でな
金は入らんし棒は入れられんし
悲しかったなぁ
0478デフォルトの名無しさん2014/12/26(金) 21:12:39.96ID:U37YhbAO
タッチタイプという語を知らないという老害自慢しかできないなら黙ってくださいね
0479デフォルトの名無しさん2014/12/26(金) 23:10:04.00ID:Dh6fXMBx
ダッチワイフに見えた
0480デフォルトの名無しさん2014/12/26(金) 23:50:50.17ID:GnotqpXf
このひと病気かな ID:0m+CPJzh
0481デフォルトの名無しさん2014/12/27(土) 03:56:02.78ID:nu41WR0t
>>478
わはははは
瑣末君の無駄な書き込み乙

>>478
たかが表現に拘泥するあたり才能のなさを告白してるな
ろくな研究できてないだろ

さてと
ブラインドでカチャカチャやるか

コラコラ、そこの、低能
クチュクチュじゃないからな、ほらほら、中指立てるな
0482デフォルトの名無しさん2014/12/27(土) 10:31:37.62ID:fnnT6z+r
その飲み会でうざがられてるおっさんのようなセンスの18禁ネタはわざとなの
0483デフォルトの名無しさん2014/12/27(土) 11:22:15.74ID:GT0kNYLG
下品さを装って強がるのがせいぜい
0484デフォルトの名無しさん2014/12/27(土) 12:03:58.24ID:8H3WtYVY
瑣末で才能のカケラも無い、今すぐ回線切って首吊って、
氏ねじゃなくて死ねよゴミカス >>481
0485デフォルトの名無しさん2014/12/27(土) 12:45:53.81ID:NculZWCD
R7RS-large が規定されたとして、それでいったい何を作るのだ?
CLの仕様より大きくなるらしいが。
0486デフォルトの名無しさん2014/12/27(土) 17:56:08.09ID:OOwiOXEM
そんなの好きなもん作れよ
0487デフォルトの名無しさん2014/12/27(土) 18:33:20.71ID:JqzH5Jvr
やっぱCommon Lispだよな
てかISLisp改良して欲しい
0488デフォルトの名無しさん2014/12/27(土) 20:17:01.39ID:OOwiOXEM
お前がやれよ。 仕様なんて言い張ったもん勝ちだぞ。
0489デフォルトの名無しさん2014/12/27(土) 21:58:53.06ID:qq52R1C7
CLにはとくに不満は思いつかない
処理系にはどんどん頑張ってほしいけど
あえて言うなら処理系依存の所を減らしてくれたらいいけど
0490デフォルトの名無しさん2014/12/27(土) 23:19:17.50ID:8H3WtYVY
>>488
実装がともなってないと相手にされないことも多い。
(だから実装作れ、超がんがれ、という話になるわけだが)
0491デフォルトの名無しさん2014/12/27(土) 23:24:01.98ID:kcXcAVhx
大学でlisp処理系を作らされる学生の数、それがlispの仕様の数である
0492デフォルトの名無しさん2014/12/27(土) 23:30:07.38ID:qq52R1C7
簡単な処理系の三つや四つ
0493デフォルトの名無しさん2014/12/27(土) 23:31:44.97ID:qq52R1C7
C-cC-kしようとしたらC-cC-cしてしまった
まあみんなそれくらい作ってるよな
0494デフォルトの名無しさん2014/12/28(日) 09:07:42.58ID:EmbVcJ4C
わはは君ってあちこちに出てくるけど総じてキチガイで笑う
0495デフォルトの名無しさん2014/12/28(日) 09:25:51.22ID:GqM4jvZj
初心者の俺にはどこらへんが基地外なのかさっぱりわからない
0496デフォルトの名無しさん2014/12/28(日) 10:52:27.52ID:uZelGoi1
>>472
ハノンとかチェルニーとか人生の時間の無駄だから‥インベンションやシンフォニアがおすすめだ
0497デフォルトの名無しさん2014/12/28(日) 14:21:40.21ID:lDrrlByw
誰か教えてくれ。
このマクロは (i (f)) => #f , (i f) => #t でいいのか?

(define-syntax i
(syntax-rules ()
((_ c)
(letrec-syntax ((f (syntax-rules () ((_) #t)))
(t (syntax-rules ()
((_ c) (f))
((_ x) #f))))
(t f)))))
0498デフォルトの名無しさん2014/12/28(日) 18:43:29.49ID:k9mhlpYK
>>497
いいよ。
0499デフォルトの名無しさん2014/12/28(日) 19:13:59.16ID:3WT3VAff
>>497
これ、定義の3行目のcと6行目のcは別ものとして扱われるはずだから、
(i Y)でYになにをもってきても7行目の((_ x) #f)は適用されんだろ。
結局、常に(i Y) => #t になる。
0500デフォルトの名無しさん2014/12/28(日) 19:17:22.18ID:6IxIWlMA
 
 
     Gun = Kata
0501デフォルトの名無しさん2014/12/28(日) 19:46:02.03ID:k9mhlpYK
>>499
別物にはならないよ。 同じだよ。
0502デフォルトの名無しさん2014/12/28(日) 19:53:47.21ID:AQDitcxr
>>491
俺も作ったわ w
専用命令込みで
05034992014/12/28(日) 20:17:27.76ID:3WT3VAff
>>501
R5RSのsyntax-rulesの説明を見る限り、
cはパターン変数として扱われるから
7行目のcは3行目のcを参照しないでしょ。

このへん、R6RS及びR7RSで変更されたの?
0504デフォルトの名無しさん2014/12/28(日) 21:10:05.79ID:9AFaWS8j
>>503
自分はMoshとGaucheを信用しているのだが、それぞれ結果が異なる。
mosh> (i f)
#t

gosh> (i f)
*** ERROR: unbound variable: f
Stack Trace:
______________
05054992014/12/28(日) 23:32:50.46ID:3WT3VAff
>>504
gaucheのdefine-syntaxってdefine-syntaxを含むマクロが定義できないバグが
あったんやけど、letrec-syntaxでも同じなんじゃないかな。
05065012014/12/29(月) 02:10:36.92ID:4HBx8iTh
>>503
パターン変数だが、それによって 7 行目の c が 3 行目の c に対応しないとする理由になると考える理由がわかんないな。
05074992014/12/29(月) 07:12:27.05ID:DmZ787iM
>>506
ごめんなさい、勘違いしてました。
05084972014/12/29(月) 08:58:11.66ID:KnCKCogl
>>507
自分もcについて同様に考えていた。それぞれのスコープがあるんじゃないか?って。
0509デフォルトの名無しさん2014/12/29(月) 11:35:08.08ID:peqZoxpi
schemeの純潔マクロは時間の無駄だよね
0510デフォルトの名無しさん2014/12/29(月) 12:31:51.57ID:KnCKCogl
>>509
まったくだ。それでなくても開発者人口が極めて少なく、マンパワーが
不足しているのに、貴重なリソースを健全マクロに注いでいる。
0511デフォルトの名無しさん2014/12/29(月) 14:42:35.74ID:TA0KsTNu
潔癖症って健全じゃないよね
融通が効かないし、純潔でないものは無条件に悪と決めつけてるから、実務では汚染源になる
0512デフォルトの名無しさん2014/12/29(月) 15:14:25.22ID:LxjJzYoX
>>511のidで思いだしたけどTAOで引数にクォートを付けて
事前に評価されないようにする定義方法あったよな
ああいうのを取り入れたlisp-2が欲しい
0513デフォルトの名無しさん2014/12/29(月) 15:47:38.70ID:Ha3wslYM
貴重なリソースっていっても開発者が好きでやってることでしょ
勝手に開発者のモチベーションを共有リソースにするやつがいるんだな
0514デフォルトの名無しさん2014/12/29(月) 16:42:30.82ID:KnCKCogl
>>513
気に障ったんなら許してくれ。開発者が完全な衛生的マクロを望み、
ユーザーが渇望しているのなら、それでいいと思う。孤高の人、scheme
0515デフォルトの名無しさん2014/12/29(月) 20:24:23.96ID:4HBx8iTh
>>511
既に >>451 で指摘されているけど、 syntax-rules は現時点での妥協でしかないのでこれだけで「衛生的マクロ」を評価すんなよ。
0516デフォルトの名無しさん2014/12/29(月) 21:39:05.88ID:FaRhf2Lb
>>515
syntax-case ってのも妥協の産物なのかい?
0517デフォルトの名無しさん2014/12/29(月) 22:21:18.33ID:yyaVSOAH
衛生的マクロの利点は一応分かってる積もりだけど、CLのgensym+パッケージに比べて素晴らしいもの、とは思えないんだよなぁ。
シロウト意見だけど、これだけ何十年も決まらない、って衛生的マクロのアイディアに何処かに根本的な無理があるんじゃないの?
第1級の継続より限定継続の方が現実的、なみたいにさ。
それとも議論を尽くせばそのうち決まるものなのかな。
0518デフォルトの名無しさん2014/12/30(火) 02:28:17.65ID:dHN2E2Y1
>>516
Yes。
底レベルで何をやってるかを隠していきなり高水準な機能を与えてる。
底レベルでの処理にどんなモデルを採用するかをうやむやにした結果。
0519デフォルトの名無しさん2014/12/30(火) 02:50:07.82ID:dHN2E2Y1
>>517
マクロに限らずまだまだまだまだ決まってないことだらけじゃないか。
そんでもって、そもそも決めなきゃならないのかっていう議論さえときどき出てくる。
仕様にしてしまうことで実装を縛るのを嫌がってるんだよ。
それでも、どうしても決まってしまったものが仕様になる。
Schemeってそういうものだろ。 単に方針の違い。
0520デフォルトの名無しさん2014/12/30(火) 03:18:27.54ID:pTIn0EX1
黒板言語は伊達じゃない
0521デフォルトの名無しさん2014/12/30(火) 08:09:57.76ID:2a7COvxL
>>517
フルの継続は実装としては興味深いが、ユーザーとしては使いにくいな。
仕様を限定して実装を軽くしてやった方が使い道があるだろうと思う。
0522デフォルトの名無しさん2014/12/30(火) 08:27:20.30ID:qF0mG1f3
>>473
左腕がサイコガンか何かなのか?
0523デフォルトの名無しさん2014/12/30(火) 14:22:27.11ID:dHN2E2Y1
>>521
そりゃ逆だろう。 実装は面倒くさいがユーザーとしてはフルの方がわかりやすいよ。
継続が一回しか呼出されないとか、範囲が限定されているとかいうのはプログラムから読み取って処理系が最適化を頑張って欲しい。
ユーザーには制限が見えない方がいい。
0524デフォルトの名無しさん2014/12/30(火) 14:32:13.09ID:3v7rngRa
メモリとCPUというどの実装にも明記されない確実な制限があるし
0525デフォルトの名無しさん2014/12/30(火) 14:46:07.77ID:2a7COvxL
>>523
昔のcall/ec程度で十分だと思うがなぁ。
CLの黒田さんにもフルの継続の問題点が指摘されている。
0526デフォルトの名無しさん2014/12/30(火) 14:57:18.11ID:2a7COvxL
誰が継続に永続性を持たせるべきだって言いだしたんだい?
Dybvig先生?
0527デフォルトの名無しさん2014/12/30(火) 15:38:37.11ID:dHN2E2Y1
>>525
「十分」って誰基準よー。
そういう考え方やめろよ。
制限を排除していくのがSchemeの大綱だろ。
0528デフォルトの名無しさん2014/12/30(火) 15:57:42.62ID:ZsdhomO+
>>527
大綱? それ、どこに書いてあるんだ?
0529デフォルトの名無しさん2014/12/30(火) 16:02:52.74ID:dHN2E2Y1
>>528
Introduction
0530デフォルトの名無しさん2014/12/30(火) 16:18:00.44ID:ZsdhomO+
>>527
そこまでは書いてないと思うが。
でもそう考えているschemerは多いんだろうな。
0531デフォルトの名無しさん2014/12/30(火) 16:19:04.99ID:3v7rngRa
制限を排除するのか、制限を追加するのか、どっちともとれるな

Programming languages should be designed not by piling feature on top of feature,
but by removing the weaknesses and restrictions that make additional features appear necessary.

必要な機能を追加するのではなく、その機能が必要になるような弱点や制限を取り除くべき
0532デフォルトの名無しさん2014/12/30(火) 16:27:33.04ID:vs+COFUK
フルの継続って、むしろ高速化するための弱点になってるような気がしなくもない
0533デフォルトの名無しさん2014/12/30(火) 16:30:38.38ID:+7B8jKAW
call/ec のある Racket は流石だと言うことだ
0534デフォルトの名無しさん2014/12/30(火) 16:36:36.26ID:3v7rngRa
Schemeには高速化よりも、表現の正しさを求めたい
0535デフォルトの名無しさん2014/12/30(火) 16:40:20.02ID:dHN2E2Y1
>>532
明記はされていないものの、Scheme的には表現力を重視していると思う。
だからといって遅すぎてもよいというわけでもないのでそこらへんはバランスを取りながらということで。
0536デフォルトの名無しさん2014/12/30(火) 18:40:08.70ID:ZsdhomO+
教えてくれ。このコードって(import cxr) を落としてるんじゃね?
https://gist.github.com/SaitoAtsushi/8784203
動かない。
0537デフォルトの名無しさん2014/12/30(火) 19:10:19.18ID:ZsdhomO+
直したら動いた。これだけ変態的なマクロだと処理系のテスト用にいいな。
効率、めっちゃ悪そうだけど。
0538デフォルトの名無しさん2014/12/30(火) 19:52:37.92ID:dHN2E2Y1
>>536-537
car や cdr を使ってるからか?
(scheme base) に car や cdr は含まれてるので、 (scheme cxr) を import しなけりゃ動かないというのなら処理系 (が持つライブラリ) の方が間違ってると思う。
0539デフォルトの名無しさん2014/12/30(火) 19:55:15.74ID:dHN2E2Y1
>>536
それはちょっと古いやつ。
こっちの方が本格的になってる。
https://github.com/SaitoAtsushi/pattern-match-lambda
0540デフォルトの名無しさん2014/12/30(火) 20:01:55.94ID:ZsdhomO+
>>538
ああ、そうなのか。妙な構成にしておくんだな。
0541デフォルトの名無しさん2014/12/30(火) 20:18:52.16ID:ZsdhomO+
>>539
実用性はともかくマクロ展開期のテストにはいいな。
動かない処理系、けっこうあるんじゃないか?
0542デフォルトの名無しさん2014/12/30(火) 20:59:02.98ID:ZsdhomO+
>>539
GaucheのR7RSモードで試してみたが、全然、動かないぞ。
0543デフォルトの名無しさん2014/12/30(火) 21:07:29.63ID:dHN2E2Y1
>>542
known issue。
マクロでマクロを生成する系のマクロはR5RSの頃からGaucheでは動かないことがあったよ。
今のheadではexplicit renamingが実装されていて、それを元に展開器がSchemeで書き直される予定があるよ。
次のリリースで修正されるか、間に合わなければその次のリリースになるとのこと。
0544デフォルトの名無しさん2014/12/30(火) 21:09:36.95ID:ZsdhomO+
>>543
了解
0545デフォルトの名無しさん2014/12/30(火) 21:30:59.76ID:vs+COFUK
CLerの素朴な疑問だけど、schemeのマクロ展開器、なんでそんなに難しいんだろ。
仕様が難しいの?それとも曖昧なの?
■ このスレッドは過去ログ倉庫に格納されています