Common Lisp、SchemeをはじめとするLisp族全般のスレです
■前スレ
Lisp Scheme Part40
http://mevius.5ch.net/test/read.cgi/tech/1426481152/
■テンプレ
ttp://wiki.fdiary.net/lisp/
■関連スレ
【Lisp】プログラミング言語 Clojure #4【JVM】 [無断転載禁止]©2ch.net
http://mevius.5ch.net/test/read.cgi/tech/1483498849/
【GNU】スクリプト言語 Guile【scheme】
http://mevius.5ch.net/test/read.cgi/tech/1239985829/
【入門】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【言語】
http://peace.2ch.net/test/read.cgi/tech/1183396621/
Lisp@UNIX版
http://mevius.5ch.net/test/read.cgi/unix/1019926525/
Lisp Scheme Part41
2018/07/15(日) 02:05:28.62ID:oGr67yTf
346デフォルトの名無しさん
2021/03/19(金) 21:11:14.03ID:RMQx/osX 一部の日本人が布教に熱心で検索にかかりまくるから胡散臭くて敬遠してたんだが、少なくとも初期はcl委員が関わってるし由緒はあるんだよな
無難なlispだが、大体スーパーセットなclにアクティブですごい処理系沢山ある限り絶対流行らんが
あんまり布教頑張るとネガキャンに見えるぞ…
無難なlispだが、大体スーパーセットなclにアクティブですごい処理系沢山ある限り絶対流行らんが
あんまり布教頑張るとネガキャンに見えるぞ…
347デフォルトの名無しさん
2021/03/20(土) 01:03:24.86ID:iR2BedGg >>338
vimだと階層に合わせて背景塗り分けるプラグインとかあるね
Peirce(パースの法則の人)も初めはlogical graphと言う円で囲む二次元言語を考えてたんだが、今言及されるときはテキスト表現で()になってる(そして読みやすい)
歴史はめぐるってか
ちなみにlispと見た目が似てるからってパーサを書いたが、やはり親和性が高い
面白いのでオススメ
vimだと階層に合わせて背景塗り分けるプラグインとかあるね
Peirce(パースの法則の人)も初めはlogical graphと言う円で囲む二次元言語を考えてたんだが、今言及されるときはテキスト表現で()になってる(そして読みやすい)
歴史はめぐるってか
ちなみにlispと見た目が似てるからってパーサを書いたが、やはり親和性が高い
面白いのでオススメ
348デフォルトの名無しさん
2021/03/20(土) 01:11:33.86ID:iR2BedGg コードエディタじゃなくて残念なんだけど、愛用してるOneNoteのテキストのドラッグが()ごとドラッグしてくれるのに気づいた
まあいつものMSのお節介なんですけどね
本来の用途である物書きでは選択範囲を自由に決めさせてくれないイライラ要素
まあいつものMSのお節介なんですけどね
本来の用途である物書きでは選択範囲を自由に決めさせてくれないイライラ要素
349デフォルトの名無しさん
2021/03/20(土) 01:12:20.50ID:iR2BedGg (特に日本語!)
350はちみつ餃子 ◆8X2XSCHEME
2021/03/20(土) 01:20:25.61ID:O2z0YRFR 規格っつーのは多少の粗があっても皆で統一したほうが便利だというもんなんで、
ユーザー規模がないものは規格化が活きてこない。
ISLISPでコードが書いてあってもオレオレLISPで書いてあるのと大差ないんだよ。
共通の知識になってないから。
ISLISP の仕様自体が悪いわけではないし劣っているわけでもないと思うんだけど、
最初に広められなかったらこれから広まるってことはもう無いんだろうな。
それはそれでいいんじゃね。 細々とやっていくのが好きな人もいるんだろ。
ユーザー規模がないものは規格化が活きてこない。
ISLISPでコードが書いてあってもオレオレLISPで書いてあるのと大差ないんだよ。
共通の知識になってないから。
ISLISP の仕様自体が悪いわけではないし劣っているわけでもないと思うんだけど、
最初に広められなかったらこれから広まるってことはもう無いんだろうな。
それはそれでいいんじゃね。 細々とやっていくのが好きな人もいるんだろ。
351デフォルトの名無しさん
2021/03/20(土) 01:39:51.02ID:SzdWYV/s 30年事足りるほど十分カバーしてるclってすごいよな(実働は1980年初頭だからもっと?)
まあマルチスレッドあたりの仕様がバラバラなので、そこをしっかり決めてくれるMACLISP風規格があれば、俺はポッと出でも支持するんだが
まあマルチスレッドあたりの仕様がバラバラなので、そこをしっかり決めてくれるMACLISP風規格があれば、俺はポッと出でも支持するんだが
352はちみつ餃子 ◆8X2XSCHEME
2021/03/20(土) 02:00:29.14ID:O2z0YRFR >>351
Scheme で言う SRFI に相当するものとして Common Lisp にも CDR (Common Lisp Document Repository) があるんだが、
Common Lisp は Scheme よりも実務主義というか話し合いするよりも動くライブラリを置いときゃいいだろみたいな文化があって
共通仕様の策定に熱心ではないような気がするな。
Scheme で言う SRFI に相当するものとして Common Lisp にも CDR (Common Lisp Document Repository) があるんだが、
Common Lisp は Scheme よりも実務主義というか話し合いするよりも動くライブラリを置いときゃいいだろみたいな文化があって
共通仕様の策定に熱心ではないような気がするな。
353デフォルトの名無しさん
2021/03/20(土) 02:13:36.08ID:SzdWYV/s >>352
今誰が主導してるかと訊かれて、答えに詰まるのは特異な状況だとは思う
商用(持ってないけど)ですら保守的にみえる
ぬるま湯に浸かるのを良しとしないISLISPの人を讃えたい
フリーでまともな処理系待ってるから出来たら起こしてくれよな!(讃えるだけ)
今誰が主導してるかと訊かれて、答えに詰まるのは特異な状況だとは思う
商用(持ってないけど)ですら保守的にみえる
ぬるま湯に浸かるのを良しとしないISLISPの人を讃えたい
フリーでまともな処理系待ってるから出来たら起こしてくれよな!(讃えるだけ)
354デフォルトの名無しさん
2021/03/20(土) 02:19:30.20ID:SzdWYV/s こんな感じの人現れないかな
https://i.imgur.com/h6qXF7E.jpg
https://i.imgur.com/h6qXF7E.jpg
355デフォルトの名無しさん
2021/03/20(土) 03:36:41.06ID:y8ipzAe/ でもミンスキーは言ってたよ
表情や仕草が人間ぽいものはたくさん作られたが、
福島の震災で作業できるロボットは創り出せなかった
もう何十年も止まったままだ
って
表情や仕草が人間ぽいものはたくさん作られたが、
福島の震災で作業できるロボットは創り出せなかった
もう何十年も止まったままだ
って
356デフォルトの名無しさん
2021/03/20(土) 03:47:36.11ID:J9z4ezp0 SRFI出るや否や写経と称してシュババとクオリティ実装するclerが結構居るし、必要とあらば足りるしな
quicklispにも結構載ってるよね、clに混ぜるのは違和感あるからあくまでお手本としてアイデアを拝借するだけだが()
scheme処理系も多くのSRFIを標準で揃えてるわけじゃないから(ポートは容易だろうが)、やっぱまとめ役が居ないことに尽きる
qlがやる気出さないかな
quicklispにも結構載ってるよね、clに混ぜるのは違和感あるからあくまでお手本としてアイデアを拝借するだけだが()
scheme処理系も多くのSRFIを標準で揃えてるわけじゃないから(ポートは容易だろうが)、やっぱまとめ役が居ないことに尽きる
qlがやる気出さないかな
357はちみつ餃子 ◆8X2XSCHEME
2021/03/20(土) 15:18:16.80ID:O2z0YRFR358はちみつ餃子 ◆8X2XSCHEME
2021/03/20(土) 15:25:35.53ID:O2z0YRFR SRFI や CDR は (英語がわかるなら!) 誰でも提出できるし、
議論が尽くされたと思ったときに決定稿に (あるいは撤回を) していい。
ユーザーコミュニティの中に文書の置き場と相談の場所があるだけなので、
誰かが可否を決定してるわけではない。
主導者がいないっつってもコミュニティで議論してたらだいたい「いつもの面子」みたいにはなるだろうけどな。
つまり SRFI や CDR で決定稿になっても権威が与えられるわけではないので、
そんなプロセスを経ずとも適当にライブラリを作って皆が使ったり使わなかったりして
デファクトスタンダードが決まっていけばそれでいいんちゃうの?
という考え方もあって、 Common Lisp は割とそういう空気っぽい。
Common Lisp のことはそれほど知らない (Scheme についてもあまり知らないけど)
ので間違ってたら指摘してね。
議論が尽くされたと思ったときに決定稿に (あるいは撤回を) していい。
ユーザーコミュニティの中に文書の置き場と相談の場所があるだけなので、
誰かが可否を決定してるわけではない。
主導者がいないっつってもコミュニティで議論してたらだいたい「いつもの面子」みたいにはなるだろうけどな。
つまり SRFI や CDR で決定稿になっても権威が与えられるわけではないので、
そんなプロセスを経ずとも適当にライブラリを作って皆が使ったり使わなかったりして
デファクトスタンダードが決まっていけばそれでいいんちゃうの?
という考え方もあって、 Common Lisp は割とそういう空気っぽい。
Common Lisp のことはそれほど知らない (Scheme についてもあまり知らないけど)
ので間違ってたら指摘してね。
359はちみつ餃子 ◆8X2XSCHEME
2021/03/21(日) 02:50:10.72ID:GD6fpf+y ところで IEEE の Scheme は期限を過ぎても更新せずにそのまま廃版になってたみたいね。
https://standards.ieee.org/standard/1178-1990.html
知らんかった。
元から参照しているやつはあんまりいなかっただろうし
ステータスが Withdrawn になったからといって何か変わるわけでもないけどさ。
https://standards.ieee.org/standard/1178-1990.html
知らんかった。
元から参照しているやつはあんまりいなかっただろうし
ステータスが Withdrawn になったからといって何か変わるわけでもないけどさ。
360デフォルトの名無しさん
2021/03/24(水) 15:11:25.30ID:HKW94SjI361デフォルトの名無しさん
2021/04/04(日) 11:13:09.40ID:dz+wreGq lisp machine触ってみたいなと思ってたらとても素敵な物が手軽にあった!
https://archives.loomcom.com/genera/genera-install.html
https://archives.loomcom.com/genera/genera-install.html
362デフォルトの名無しさん
2021/04/04(日) 22:30:38.28ID:9kDPlOMr 素敵!
363デフォルトの名無しさん
2021/04/05(月) 19:12:20.11ID:DVkxDxiZ わだばさんのところに紹介があった
https://g000001.cddddr.org/3690710797
https://g000001.cddddr.org/3690710797
364デフォルトの名無しさん
2021/04/05(月) 21:56:17.84ID:i9PX2oQn generaはwikipedia読んだ程度だけど随分先進的そうだ
mac/lml/clまぜこぜだそうな
>>360みたいな感じでマウスで弄ったりカーソル置くと引数やdocがポップアップしたり
オンラインヘルプ大好き人間としては興味あり
まあ今時のソフト無くてもテキスト書くくらいなら十分使えそう
試したらレポる(たぶん
mac/lml/clまぜこぜだそうな
>>360みたいな感じでマウスで弄ったりカーソル置くと引数やdocがポップアップしたり
オンラインヘルプ大好き人間としては興味あり
まあ今時のソフト無くてもテキスト書くくらいなら十分使えそう
試したらレポる(たぶん
365デフォルトの名無しさん
2021/04/05(月) 22:16:42.87ID:i9PX2oQn 98年まで開発(メンテ?)されてたのに驚き
366デフォルトの名無しさん
2021/04/05(月) 23:14:43.49ID:Z3TcF1gw >>361
詳細にドキュメント化されていて迷うことは無さそうだけど、これで手軽ってどんだけ良く訓練されてんだよw
詳細にドキュメント化されていて迷うことは無さそうだけど、これで手軽ってどんだけ良く訓練されてんだよw
367デフォルトの名無しさん
2021/04/05(月) 23:16:47.02ID:wm1TeUKF lisp machine/generaではcやFortranもlisp実装なんだよね
性能はさておきとても興味深い
性能はさておきとても興味深い
368デフォルトの名無しさん
2021/04/05(月) 23:42:14.84ID:i9PX2oQn 権利的に大丈夫なのかが気掛かりだ
Symbolics(のようなもの、symbolics-dks.com)はまだホームページ持っててソフト売ってるわけで
実働してるかは怪しいが
lisp machineのVMもいつまで動くやら、動作報告のあるブロブのビルド方法は不明、linuxのバージョン上がればバイナリ互換性が失われるかもしれない
近いうちにロストテクノロジーになるなこれ
Symbolics(のようなもの、symbolics-dks.com)はまだホームページ持っててソフト売ってるわけで
実働してるかは怪しいが
lisp machineのVMもいつまで動くやら、動作報告のあるブロブのビルド方法は不明、linuxのバージョン上がればバイナリ互換性が失われるかもしれない
近いうちにロストテクノロジーになるなこれ
369デフォルトの名無しさん
2021/04/06(火) 00:03:42.02ID:4WR5kIDO linuxも一応abiの規定あるけど同じアーキテクチャでも違うディストロでそのまま動くとは限らんしな
とりあえずクローンした気がする(気がするだけ)
winならx86系でさえあれば安泰なんだが、generaのXインターフェイス使ってるぽいし無理そうだよなあ
うちでは代々バイナリをコピペし継いだoffice95がwin10でバリバリ元気に働いてるよ
とりあえずクローンした気がする(気がするだけ)
winならx86系でさえあれば安泰なんだが、generaのXインターフェイス使ってるぽいし無理そうだよなあ
うちでは代々バイナリをコピペし継いだoffice95がwin10でバリバリ元気に働いてるよ
370デフォルトの名無しさん
2021/04/06(火) 19:03:06.66ID:9PToVtUo371デフォルトの名無しさん
2021/04/06(火) 19:36:16.54ID:R6aCJEvU Alto→NextStep→OSXがコンシューマ向けになって成功してるのに
Interlisp-D、Symbolicsは(パンピー的には)伝説のマシンのままなのはどうしてなんだぜ
Interlisp-D、Symbolicsは(パンピー的には)伝説のマシンのままなのはどうしてなんだぜ
372デフォルトの名無しさん
2021/04/06(火) 19:41:57.45ID:R6aCJEvU Next, OpenStepを元にしたGNU/Stepというのもあるけど
GNU/HURDが完成したら、Lispマシンぽいことやるんでしょうかね…
Objective-Cならぬ、Lispective-C(仮称)で
GNU/HURDが完成したら、Lispマシンぽいことやるんでしょうかね…
Objective-Cならぬ、Lispective-C(仮称)で
373デフォルトの名無しさん
2021/04/07(水) 02:31:56.66ID:nO5/cs4F >>372
そういう考え方リスペクトする
そういう考え方リスペクトする
374デフォルトの名無しさん
2021/04/07(水) 22:28:51.32ID:0y6O4yId GNUは、というかストールマンが目指してるのはフリーな(自由な)CとLispの環境だと思うんだよね
375デフォルトの名無しさん
2021/04/07(水) 22:50:57.97ID:BC88Bm4+ guileをゴリ推してるけどなにそれ状態だよなー
特段良いとは思わないけどlisp押ししてくれる貴重な権力者
正直C協調性だとか拡張向きだとか今時普通なんで売れないと思います
特段良いとは思わないけどlisp押ししてくれる貴重な権力者
正直C協調性だとか拡張向きだとか今時普通なんで売れないと思います
376デフォルトの名無しさん
2021/04/07(水) 22:52:05.81ID:BC88Bm4+ 応援のつもりで一応入れてる
ちゃんとダウンロード数カウントしてるか知らんが
ちゃんとダウンロード数カウントしてるか知らんが
377はちみつ餃子 ◆8X2XSCHEME
2021/04/08(木) 01:27:32.57ID:d0EnvaGP Guile も良い処理系だよ。
Windows ではいまいち使い勝手が良くないからワイはあまり使わんけど。
GNUプロジェクトとして開発しているだけあって、
ライセンス的にもビルドプロセス的にもGNUのソフトウェアとは連携しやすいから
個別のソフトウェアとしてどうこうというだけでなく
GNUプロジェクトであることに意味があるんだと思う。
ただアプリケーションの拡張用に Guile はリッチすぎる気がする。
ライブラリはホスト環境 (アプリケーション) 側で用意するから
言語処理系の側は単純なほうがありがたいことが多い。
GIMP が TinyScheme をベースにしてることからもわかるように、
拡張用言語はこんくらいの規模でいんだよな。
Windows ではいまいち使い勝手が良くないからワイはあまり使わんけど。
GNUプロジェクトとして開発しているだけあって、
ライセンス的にもビルドプロセス的にもGNUのソフトウェアとは連携しやすいから
個別のソフトウェアとしてどうこうというだけでなく
GNUプロジェクトであることに意味があるんだと思う。
ただアプリケーションの拡張用に Guile はリッチすぎる気がする。
ライブラリはホスト環境 (アプリケーション) 側で用意するから
言語処理系の側は単純なほうがありがたいことが多い。
GIMP が TinyScheme をベースにしてることからもわかるように、
拡張用言語はこんくらいの規模でいんだよな。
378デフォルトの名無しさん
2021/04/08(木) 18:16:52.22ID:IR9u3KhO GNUといえばEmacs
最も普及しているLisp環境
最も普及しているLisp環境
379本田
2021/04/09(金) 05:55:12.32ID:U7WaDuwU >>361
GitHub - lisper/cpus-caddr: FPGA based MIT CADR lisp machine - rewritten in modern verilog - boots and runs
https://github.com/lisper/cpus-caddr
GitHub - lisper/cpus-caddr: FPGA based MIT CADR lisp machine - rewritten in modern verilog - boots and runs
https://github.com/lisper/cpus-caddr
380デフォルトの名無しさん
2021/04/10(土) 00:08:20.59ID:pgV1eSpW guileはdicoと使うと便利ぞ
dicoはdictと喧嘩しやがるアレなやつだからだが
dicoはdictと喧嘩しやがるアレなやつだからだが
381デフォルトの名無しさん
2021/04/10(土) 00:11:58.64ID:pgV1eSpW382本田
2021/04/11(日) 07:05:56.11ID:vMH2MoUG >>381
Unlambda.com | Main / Cadr
http://www.unlambda.com/index.php?n=Main.Cadr
Retrocomputing - MIT CADR Lisp Machines
CADR Emulation
Unlambda.com | Main / Cadr
http://www.unlambda.com/index.php?n=Main.Cadr
Retrocomputing - MIT CADR Lisp Machines
CADR Emulation
383デフォルトの名無しさん
2021/05/04(火) 13:30:15.28ID:fppjg2ZR LispとCの融合ということだと、KCLはLispective-Cなのでは
384本田
2021/05/06(木) 21:07:40.28ID:0MCggaNl385デフォルトの名無しさん
2021/05/08(土) 16:12:40.38ID:HQQ9X3gD Racket Programming the Fun Way: From Strings to Turing Machines
https://nostarch.com/racket-programming-fun-way
https://nostarch.com/racket-programming-fun-way
386デフォルトの名無しさん
2021/05/25(火) 18:47:13.72ID:JJYQeYh+ pというprocedureが何回呼び出されたかを出力したいと思って以下のコードを書きましたが、意図通り動きません。
どうすればいいですか?
(define (cube x) (* x x x))
(define (p x) (- (* 3 x) (* 4 (cube x))))
(define (count_p angle n)
(if (not (> (abs angle) 0.1))
n
(p (count_p (/ angle 3.0) (+ n 1)))))
どうすればいいですか?
(define (cube x) (* x x x))
(define (p x) (- (* 3 x) (* 4 (cube x))))
(define (count_p angle n)
(if (not (> (abs angle) 0.1))
n
(p (count_p (/ angle 3.0) (+ n 1)))))
387デフォルトの名無しさん
2021/05/25(火) 18:50:37.18ID:JJYQeYh+ あ、分かりました。
388デフォルトの名無しさん
2021/05/25(火) 19:30:00.29ID:xQ/lxTUk そうか
389デフォルトの名無しさん
2021/06/28(月) 10:43:13.88ID:TRKsA7C/ Schemeで
(newline)
(display 1.0)
のように複数の文?をつなげて実行することができます。
x が正のときに (newline) と (display 1.0) を続けて実行するようにするにはどのように記述すればいいのでしょうか?
(newline)
(display 1.0)
のように複数の文?をつなげて実行することができます。
x が正のときに (newline) と (display 1.0) を続けて実行するようにするにはどのように記述すればいいのでしょうか?
390デフォルトの名無しさん
2021/06/28(月) 10:44:02.91ID:TRKsA7C/391デフォルトの名無しさん
2021/06/28(月) 11:02:31.15ID:PxTgcihw (if (< 0 x) (begin (newline) (display 1.0)))
392デフォルトの名無しさん
2021/06/28(月) 11:03:43.42ID:7XtL7Dy7 (if (< 0 x)
((lambda ()
(newline)
(display 1.0))))
((lambda ()
(newline)
(display 1.0))))
393デフォルトの名無しさん
2021/06/28(月) 14:39:39.18ID:TRKsA7C/ >>391-392
ありがとうございました。
ありがとうございました。
394デフォルトの名無しさん
2021/06/28(月) 20:21:41.41ID:3DnBzo4y condでいい
(cond ((< 0 x) (newline) (display 1.0)))
(cond ((< 0 x) (newline) (display 1.0)))
395デフォルトの名無しさん
2021/06/28(月) 21:54:24.27ID:PxTgcihw 今度でいい?
396デフォルトの名無しさん
2021/06/29(火) 12:31:46.50ID:aO3q0Gho implicit progn(begin)が欲しいならwhenとunlessを積極的に使おう
397デフォルトの名無しさん
2021/06/29(火) 12:46:42.78ID:aO3q0Gho 色んな書き方が出来るからこそ、most specificなものを使おう
398デフォルトの名無しさん
2021/06/29(火) 13:29:59.66ID:0N5v+m2R 二年前から、どうでもいい駄文が多すぎだな。
399デフォルトの名無しさん
2021/06/29(火) 17:27:58.16ID:cKUJRDcK へーじゃあ君は2年間何してたの
400デフォルトの名無しさん
2021/06/29(火) 18:52:26.88ID:yETyFiIt lispの質問が減って自己紹介みたいな駄文が多いんだよ
401デフォルトの名無しさん
2021/06/30(水) 02:43:05.48ID:HrMy06Ib 結局 most specific なものは何だろう
402デフォルトの名無しさん
2021/06/30(水) 03:40:26.71ID:hbO/nBwY when でいいんじゃね
403デフォルトの名無しさん
2021/07/07(水) 05:18:16.92ID:Jk8/Aq6G stalin って今も最速?
404デフォルトの名無しさん
2021/07/07(水) 20:28:05.30ID:Kq6g4muF スターリンは残酷に最適化するからな
405デフォルトの名無しさん
2021/07/07(水) 23:24:28.15ID:690XxCxv プログラムがr4rsで記述できていてシングルスレッドしばりの競争ならいまでも速い可能性はあるだろうな
だれか追試してくれよ
だれか追試してくれよ
406デフォルトの名無しさん
2021/07/11(日) 18:50:40.89ID:aa3AN28M (eq? '(a b c) (list 'a 'b 'c))
を実行すると
#f
となるのはなぜでしょうか?
を実行すると
#f
となるのはなぜでしょうか?
407デフォルトの名無しさん
2021/07/11(日) 19:31:30.75ID:19O1KSs3 eq?はメモリ上の実体が同一かどうかを返すので、値を比較したかったらequal?を使えばいいよ
408デフォルトの名無しさん
2021/07/11(日) 20:25:33.03ID:aa3AN28M >>407
ありがとうございました。
ありがとうございました。
409デフォルトの名無しさん
2021/07/12(月) 20:42:52.24ID:O01P9WLY named let使おうと思ったらCommon lispには無かった
410デフォルトの名無しさん
2021/07/12(月) 22:45:17.08ID:u5zIJQm8 (let loop ((n 10)) (if (> n 0) (loop (- n 1)) #t))
↓
(((lambda (loop) (set! loop (lambda (n) (if (> n 0) (loop (- n 1)) #t))) loop) 'dummy-label) 10)
こういう仕組みだからCLで書けなくもないと思うけど
↓
(((lambda (loop) (set! loop (lambda (n) (if (> n 0) (loop (- n 1)) #t))) loop) 'dummy-label) 10)
こういう仕組みだからCLで書けなくもないと思うけど
411デフォルトの名無しさん
2021/07/12(月) 23:10:07.08ID:eka9NNGK 現代のlispハッカーはみんなloopマクロ使ってるよ
412デフォルトの名無しさん
2021/07/13(火) 08:34:35.37ID:egse1qJT named-lambdaならalexandriaにある
413デフォルトの名無しさん
2021/07/13(火) 10:27:19.42ID:A078Hhon Schemeで、
(+ '3 3)
を評価すると
6
が返ります。
'3 は「3」というシンボルを表わすのではないんですか?
(+ '3 3)
を評価すると
6
が返ります。
'3 は「3」というシンボルを表わすのではないんですか?
414はちみつ餃子 ◆8X2XSCHEME
2021/07/13(火) 11:05:03.90ID:jDPJbhfl >>413
クウォートは評価を抑制するという仕組み。
データ (S式) の世界がプログラムの世界にマッピングされるときにデータの世界のままで留め置く感じ。
識別子はデータの世界ではシンボルなので、(変数として) 評価しなければシンボル自体となる。
3 はデータの世界でも数値の 3 であり、数値はプログラムの世界で評価すると
それ自体になるという自己評価 (self-evaluating) という規則の対象なので
3 はクウォートを付けても付けなくても評価結果は数値の 3 。
ちなみにベクタリテラルが自己評価の対象になるかどうかは変更があったので注意が必要。
R5RS/R6RS では自己評価の対象ではないのでクウォートが必要だが R7RS では自己評価になる。
まあほとんどの処理系は適当に許容したりもするんだけど。
クウォートは評価を抑制するという仕組み。
データ (S式) の世界がプログラムの世界にマッピングされるときにデータの世界のままで留め置く感じ。
識別子はデータの世界ではシンボルなので、(変数として) 評価しなければシンボル自体となる。
3 はデータの世界でも数値の 3 であり、数値はプログラムの世界で評価すると
それ自体になるという自己評価 (self-evaluating) という規則の対象なので
3 はクウォートを付けても付けなくても評価結果は数値の 3 。
ちなみにベクタリテラルが自己評価の対象になるかどうかは変更があったので注意が必要。
R5RS/R6RS では自己評価の対象ではないのでクウォートが必要だが R7RS では自己評価になる。
まあほとんどの処理系は適当に許容したりもするんだけど。
415デフォルトの名無しさん
2021/07/13(火) 16:32:31.52ID:NGIJbx4Y number?で#tなだけで数値をシンボルで実装した処理系もあるかもしれん
416はちみつ餃子 ◆8X2XSCHEME
2021/07/13(火) 17:10:19.73ID:QSkHhbzy 小さい数値はヒープアロケーションせずにワードに詰め込む (ことで GC 削減して高速化を図る)
ような実装が一般的だったり、同じ内容の文字列リテラルを統合したりすることがある。
eq? が数値や文字列について処理系依存になっているのは
おそらくそういった最適化を許すための配慮なんだけど、
処理が遅くなってでも一貫した扱いをするというデザインを選んだなら
内部的に数値とシンボルと統合することも選択肢としてはあるかもね。
そうしてもユーザー視点ではたいして得なことはないんだけど、
アプリケーションに組み込んで拡張用言語として使うとか
だったらアプリケーション側の事情と馴染みやすいかどうかみたいな視点もあるし。
ような実装が一般的だったり、同じ内容の文字列リテラルを統合したりすることがある。
eq? が数値や文字列について処理系依存になっているのは
おそらくそういった最適化を許すための配慮なんだけど、
処理が遅くなってでも一貫した扱いをするというデザインを選んだなら
内部的に数値とシンボルと統合することも選択肢としてはあるかもね。
そうしてもユーザー視点ではたいして得なことはないんだけど、
アプリケーションに組み込んで拡張用言語として使うとか
だったらアプリケーション側の事情と馴染みやすいかどうかみたいな視点もあるし。
417デフォルトの名無しさん
2021/07/13(火) 19:58:17.06ID:tejz1RXC 数字はreadした時点でnumberになる
それをquoteしてもnumberのまま
quoteするとはevalされないということだ
もちろんnumberをevalしてもnumberのままだ
それをquoteしてもnumberのまま
quoteするとはevalされないということだ
もちろんnumberをevalしてもnumberのままだ
418デフォルトの名無しさん
2021/07/14(水) 06:57:41.65ID:O4vE2Kew あっそうか
末尾再帰が仕様にないからloopを使うようになってるのかな?
末尾再帰が仕様にないからloopを使うようになってるのかな?
419デフォルトの名無しさん
2021/07/15(木) 04:52:42.37ID:eqEigNI9 逆やね末尾再帰でloopを代替できるからイキって仕様からloopを消したったのがschemeやからユーザーもイキるやで
420デフォルトの名無しさん
2021/07/15(木) 06:43:25.74ID:S7wkmjz6 末尾呼び出しの最適化が至高の技術のように思っていた時期が僕にもありました
421はちみつ餃子 ◆8X2XSCHEME
2021/07/15(木) 11:32:01.61ID:d93moyXm 末尾呼出し最適化はあくまでもセマンティクスの話であって、
ループ構文を避ける強い流れがあるわけじゃないよ。
do や named let くらいしか繰り返し構文が用意されてないのは
皆が合意できる仕様をまとめられていないという非常に単純な理由だよ。
R7RS-Large に入れるループ構文の候補としては
・ SRFI-42 (https://srfi.schemers.org/srfi-42/srfi-42.html)
・ foof-loop (http://wiki.call-cc.org/eggref/5/foof-loop)
・ chibi loop (http://synthcode.com/scheme/chibi/lib/chibi/loop.html)
が挙がっている。
まあまだちゃんと議論されてないので他の候補が出るかもしれないし、
結局何も入れないということもあるかもね。
ループ構文を避ける強い流れがあるわけじゃないよ。
do や named let くらいしか繰り返し構文が用意されてないのは
皆が合意できる仕様をまとめられていないという非常に単純な理由だよ。
R7RS-Large に入れるループ構文の候補としては
・ SRFI-42 (https://srfi.schemers.org/srfi-42/srfi-42.html)
・ foof-loop (http://wiki.call-cc.org/eggref/5/foof-loop)
・ chibi loop (http://synthcode.com/scheme/chibi/lib/chibi/loop.html)
が挙がっている。
まあまだちゃんと議論されてないので他の候補が出るかもしれないし、
結局何も入れないということもあるかもね。
422デフォルトの名無しさん
2021/07/15(木) 16:04:48.23ID:MIyHkZEB アキュムレータ加えて末尾再帰で書くよりはdoを好むわ
ロジックとしては全く等価だし、見やすい方がいい
ロジックとしては全く等価だし、見やすい方がいい
423デフォルトの名無しさん
2021/07/15(木) 16:12:57.83ID:MIyHkZEB loopキーワードは:を付けてlisp keywordにすればビジュアル的に随分見やすくなるね
ところでloopの独特の言い回しはAlgol由来だと最近知った、downtoとか
esacやfiまで取り入れてたら投げ捨てるけど
ところでloopの独特の言い回しはAlgol由来だと最近知った、downtoとか
esacやfiまで取り入れてたら投げ捨てるけど
424デフォルトの名無しさん
2021/07/15(木) 16:15:28.68ID:MIyHkZEB425デフォルトの名無しさん
2021/07/15(木) 16:34:32.82ID:zKeMNTWP loopしなくてもdestructuring bindやwithの為にloop使うのは我ながら良くないと思う
値を集める節がハマると簡潔に書けるのでつい
値を集める節がハマると簡潔に書けるのでつい
426はちみつ餃子 ◆8X2XSCHEME
2021/07/15(木) 17:45:11.96ID:d93moyXm 慣れた Scheme ユーザーなら末尾呼出し (末尾再帰) になっているかどうかは空気のように判断できるけど、
do で書けるものなら do で書いたほうがそういう判断をする必要さえないわけで、
なるべく抽象度の高い構文 (または手続き) を使うに越したことはない。
大事なのは抽象化で、繰り返しをしているところなら繰り返しに見えるように書くのが筋だろ。
(繰り返しに do という名前を当てるのがどうなんだ……とも思うけど Fortran 由来らしい。)
そういう意味では >>425 が loop をループ以外の用途に使うのは確かに良くは無いんだが、
場合によってはそういうのもイディオムとして定着していることがあるから
意味に忠実にするために冗長になるくらいならイディオムに頼るほうが「わかりやすい」場合もある。
どちらがいいというわけでもなくて全体の匙加減だから難しいよね。
do で書けるものなら do で書いたほうがそういう判断をする必要さえないわけで、
なるべく抽象度の高い構文 (または手続き) を使うに越したことはない。
大事なのは抽象化で、繰り返しをしているところなら繰り返しに見えるように書くのが筋だろ。
(繰り返しに do という名前を当てるのがどうなんだ……とも思うけど Fortran 由来らしい。)
そういう意味では >>425 が loop をループ以外の用途に使うのは確かに良くは無いんだが、
場合によってはそういうのもイディオムとして定着していることがあるから
意味に忠実にするために冗長になるくらいならイディオムに頼るほうが「わかりやすい」場合もある。
どちらがいいというわけでもなくて全体の匙加減だから難しいよね。
427デフォルトの名無しさん
2021/07/15(木) 19:48:28.17ID:eqEigNI9 末尾呼出し最適化をいかした書き方というのは確かにあるのだけれど named let はシンプルな loop に特化していて中途半端なのだよなあ
428デフォルトの名無しさん
2021/07/15(木) 21:29:35.37ID:hFBqwrB0 named let 嫌いだわ、構文として紛らわしいだけ
あれはgotoとでも名乗るべき
あれはgotoとでも名乗るべき
429デフォルトの名無しさん
2021/07/16(金) 08:09:46.64ID:IT8DyczJ >>428
おいらはすき。letなんてどうせシンタックスシュガー。
おいらはすき。letなんてどうせシンタックスシュガー。
430デフォルトの名無しさん
2021/07/18(日) 09:56:21.45ID:2Hl3gQcn 書き捨てなら抽象度は低い方がよいのが原則じゃないか?
高いほうがいいのは使い回すケース、例えば数列計算関数に項を計算する関数を渡して特殊化したい場合
carがdoなら、何がしたいのか一目で分かるよね
あとclでも普通ループへの展開はしてくれると思うけど、保証はされてないから神経質な人は、より確実に等価なコードに展開されるだろうdoの方がいいかも
いやさすがに気にし過ぎか
高いほうがいいのは使い回すケース、例えば数列計算関数に項を計算する関数を渡して特殊化したい場合
carがdoなら、何がしたいのか一目で分かるよね
あとclでも普通ループへの展開はしてくれると思うけど、保証はされてないから神経質な人は、より確実に等価なコードに展開されるだろうdoの方がいいかも
いやさすがに気にし過ぎか
431はちみつ餃子 ◆8X2XSCHEME
2021/07/18(日) 10:09:27.74ID:+Ch+KzUq >>430
> 書き捨てなら抽象度は低い方がよいのが原則じゃないか?
手間とのトレードオフで抽象化層をわざわざ作るのを避けるという意味ならそうだけど、
多様な語彙 (標準ライブラリ、またはそれに近いもの) がすでに揃っている中
から選べるなら状況をより適切に表しているものをピックアップしたほうが
わかりやすいし手間も少ないでしょ。
> 書き捨てなら抽象度は低い方がよいのが原則じゃないか?
手間とのトレードオフで抽象化層をわざわざ作るのを避けるという意味ならそうだけど、
多様な語彙 (標準ライブラリ、またはそれに近いもの) がすでに揃っている中
から選べるなら状況をより適切に表しているものをピックアップしたほうが
わかりやすいし手間も少ないでしょ。
432デフォルトの名無しさん
2021/07/18(日) 10:13:20.17ID:2Hl3gQcn ポエムだけど、状態機械ともロジックは等価だよね
二項漸化式を例に
仮引数-呼び出し
末尾再帰
a b accum - b (next b) accum'
do
a b result - b (next b) result'
状態機械
a b state - b (next b) state'
状態機械は普通遷移テーブルを与えて考えるけど、制御構造で動的に割り振れば前の二者になる
状態を引数で受け渡すことで、ステートフルな計算を実現する
二項漸化式を例に
仮引数-呼び出し
末尾再帰
a b accum - b (next b) accum'
do
a b result - b (next b) result'
状態機械
a b state - b (next b) state'
状態機械は普通遷移テーブルを与えて考えるけど、制御構造で動的に割り振れば前の二者になる
状態を引数で受け渡すことで、ステートフルな計算を実現する
433デフォルトの名無しさん
2021/07/18(日) 10:18:13.98ID:2Hl3gQcn434デフォルトの名無しさん
2021/07/18(日) 10:31:34.34ID:2Hl3gQcn 'formをテーブルに書き込んでしまえば…
435デフォルトの名無しさん
2021/07/18(日) 10:43:00.23ID:iK76XXqo 状態機械の定義にそぐうかは詳しくないので分からないけど、表で管理するのは見やすそう
でもデータ構造中に保持する限り反復に翻訳される可能性は皆無だろうな
でもデータ構造中に保持する限り反復に翻訳される可能性は皆無だろうな
436デフォルトの名無しさん
2021/07/18(日) 22:30:22.92ID:wZnHH9/v do構文は何がどこかすぐ忘れる
named letはうる覚えでもなんとかなる
ただのletの亜種だから断然読みやすい
named letはうる覚えでもなんとかなる
ただのletの亜種だから断然読みやすい
437デフォルトの名無しさん
2021/07/18(日) 22:33:40.35ID:3JZJIWfz ×うる覚え
○うろ覚え
○うろ覚え
438デフォルトの名無しさん
2021/07/20(火) 02:01:05.64ID:DJlNseKm すみませんscheme初心者なのですが累乗を求めるプログラムが動きません
http://www.nct9.ne.jp/m_hiroi/func/abcscm04.html
を参考に、let と cond を使って書いてみたのですが let で局所変数を導入した瞬間に動かなくなりました
何が間違っているのか指摘していただけると幸いです
(define (pow x y)
(let ((z (pow x (quotient y 2))))
(cond ((zero? y) 1)
((zero? (modulo y 2)) (* z z))
(else (* x z z))
)
)
)
http://www.nct9.ne.jp/m_hiroi/func/abcscm04.html
を参考に、let と cond を使って書いてみたのですが let で局所変数を導入した瞬間に動かなくなりました
何が間違っているのか指摘していただけると幸いです
(define (pow x y)
(let ((z (pow x (quotient y 2))))
(cond ((zero? y) 1)
((zero? (modulo y 2)) (* z z))
(else (* x z z))
)
)
)
439デフォルトの名無しさん
2021/07/20(火) 02:30:15.19ID:yRdGIeGP infinite recursion
440デフォルトの名無しさん
2021/07/20(火) 03:11:09.60ID:DJlNseKm (z (pow x...)) の評価が ((zero? y) 1) の前に起きてるのが原因なんですね
z に (pow x..) を束縛だけして評価しないみたいなことって出来るんですかね?
(define (pow2 x y)
(if (= y 0)
1
(let ((z (pow2 x (quotient y 2))))
(if (= (modulo y 2) 0)
(* z z)
(* x z z)))))
みたいに if 文に分解して (= y 0) 1 を (let ((z (pow2 x ..) の前に出すしかないんでしょうか
let と cond を一緒に使うとスッキリ書けそうなのですが…
z に (pow x..) を束縛だけして評価しないみたいなことって出来るんですかね?
(define (pow2 x y)
(if (= y 0)
1
(let ((z (pow2 x (quotient y 2))))
(if (= (modulo y 2) 0)
(* z z)
(* x z z)))))
みたいに if 文に分解して (= y 0) 1 を (let ((z (pow2 x ..) の前に出すしかないんでしょうか
let と cond を一緒に使うとスッキリ書けそうなのですが…
441デフォルトの名無しさん
2021/07/20(火) 09:22:43.66ID:0xL9gg55 (define (pow x y)
(let ((z (lambda()(pow x (quotient y 2)))))
(cond ((zero? y) 1)
((zero? (modulo y 2)) (* (z) (z)))
(else (* x (z) (z))))))
(let ((z (lambda()(pow x (quotient y 2)))))
(cond ((zero? y) 1)
((zero? (modulo y 2)) (* (z) (z)))
(else (* x (z) (z))))))
442デフォルトの名無しさん
2021/07/20(火) 10:43:12.24ID:aBN0Hnxa 計算量悪化してない?
443デフォルトの名無しさん
2021/07/20(火) 11:23:57.77ID:0xL9gg55 (define (pow x y)
(let ((z (lambda()(pow x (quotient y 2)))))
(cond ((zero? y) 1)
((zero? (modulo y 2)) (set! z (z)) (* z z))
(else (set! z (z)) (* x z z)))))
(let ((z (lambda()(pow x (quotient y 2)))))
(cond ((zero? y) 1)
((zero? (modulo y 2)) (set! z (z)) (* z z))
(else (set! z (z)) (* x z z)))))
444デフォルトの名無しさん
2021/07/20(火) 12:21:34.41ID:27sTwTCb ifとletを使うのが一番いいと思う
(define (pow1 x y)
(let ((z (delay (pow1 x (quotient y 2)))))
(cond ((zero? y) 1)
((zero? (modulo y 2)) (* (force z) (force z)))
(else (* x (force z) (force z))))))
(define (pow2 x y)
(let ((z #f))
(cond ((zero? y) 1)
((begin
(set! z (pow2 x (quotient y 2)))
(zero? (modulo y 2)))
(* z z))
(else (* x z z)))))
(define (pow1 x y)
(let ((z (delay (pow1 x (quotient y 2)))))
(cond ((zero? y) 1)
((zero? (modulo y 2)) (* (force z) (force z)))
(else (* x (force z) (force z))))))
(define (pow2 x y)
(let ((z #f))
(cond ((zero? y) 1)
((begin
(set! z (pow2 x (quotient y 2)))
(zero? (modulo y 2)))
(* z z))
(else (* x z z)))))
445デフォルトの名無しさん
2021/07/20(火) 12:42:50.05ID:DJlNseKmレスを投稿する
