Lisp Scheme Part40 [転載禁止]©2ch.net

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん2015/03/16(月) 13:45:52.92ID:EEYZoZ1i
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/

872デフォルトの名無しさん2018/03/20(火) 23:23:33.89ID:+gsETVt6
>>865
簡単なスタックマシンにコンパイルしてみてはどうか?

873デフォルトの名無しさん2018/03/20(火) 23:24:33.08ID:+gsETVt6
>>872
継続がない言語からね
CSPありとなしで比較して

874デフォルトの名無しさん2018/03/21(水) 11:51:20.10ID:u5CZK1Hr
継続ってラムダ計算にもあるの?

875デフォルトの名無しさん2018/03/25(日) 00:56:23.32ID:1/5marwz
CPSは必ずしも再帰で使う必要はないということでいいのかな
リトルのCPSが消化不良なのは前の章までの理解が足りてないってことか

876はちみつ餃子 ◆8X2XSCHEME 2018/03/25(日) 01:16:25.39ID:vqcfoPV6
再帰とは関係なく全ての計算に関わってるよ。

877デフォルトの名無しさん2018/03/25(日) 23:02:19.40ID:wjjQa2Mo
再帰の際に、例えば階乗計算で終端条件から戻ってきて
1*2*3*.......*(n-2)*(n-1)*nと掛けられるものも継続ですか?

878デフォルトの名無しさん2018/03/26(月) 04:28:41.05ID:M0YORv20
>>877
再帰はなくても
関数からのreturn実行が
継続の適用そのものです

879デフォルトの名無しさん2018/03/26(月) 14:01:22.69ID:YDvloqxD
>>878
ああ、その説明は見事ですね

880はちみつ餃子 ◆8X2XSCHEME 2018/03/26(月) 14:19:29.21ID:S9VCdiyC
C ではアドレスが継続だと思えばだいたい合ってる。
環境が保存されないから Scheme より限定的だけども。

C だと実引数と一緒にリターンアドレスもプッシュするじゃん?
それと同じように Scheme でも戻ってくる継続を暗黙に渡してるんだよ。
Scheme の call/cc は gcc 拡張の __builtin_return_address みたいなもん。

881デフォルトの名無しさん2018/03/26(月) 16:22:01.20ID:4JGFggle
俺Cわかんないんだよね^^;

882はちみつ餃子 ◆8X2XSCHEME 2018/03/26(月) 16:54:52.93ID:S9VCdiyC
そっか〜

883デフォルトの名無しさん2018/03/26(月) 20:38:59.41ID:4JGFggle
>>877はあってますか?
終端から戻ってきた値が、入れ子の外側、つまり継続に渡されて
さらに外側の継続に渡されて
継続がなくなったら値がプリントされる
というイメージなんだけど

884デフォルトの名無しさん2018/03/26(月) 22:41:49.50ID:5QVYm+SC
Cで継続を保存しようとしたら、setjmpで保存してるもの(全レジスタの状態)とスタックの内容のコピーだろ(場合によってはかなりのサイズになるが)

885 ◆QZaw55cn4c 2018/03/26(月) 23:22:44.68ID:dvRuSlEv
>>884
setjmp/longjmp は、スタックポインタは保存してもスタックの内容のコピーはしない、だからネストの浅いところから深いところにジャンプできない

886デフォルトの名無しさん2018/03/27(火) 09:40:09.76ID:82AcOlMQ
>>885
ん?だからsetjmpの内容とスタックの内容をコピーすると思いっきり書いたつもりだったが…

887デフォルトの名無しさん2018/03/27(火) 21:44:25.00ID:vSyzL0sA
C++ coroutinesだとスタック全コピーも実装の有力な候補だな

888デフォルトの名無しさん2018/03/27(火) 22:03:59.18ID:vSyzL0sA
というか、おととし最後に聞いたときには>>884の言う通りでほぼ決まりみたいな話だった
C/C++では何と、スタックの中を書き換えることができるのだ!

889デフォルトの名無しさん2018/03/28(水) 07:06:35.26ID:lXnJ1NTY
Smalltalkならスタックフレームもオブジェクト

890デフォルトの名無しさん2018/03/28(水) 23:58:25.75ID:qqTeUvjF
Smalltalkって業務で使ってるとこあるのかな
LISP系よりはありそうなんだが

891デフォルトの名無しさん2018/03/29(木) 06:38:02.92ID:xL1sPJzZ
ヨーロッパや南米での事例が多いとか

https://medium.com/@newapplesho/今時-2017-のsmalltalkの始めかた-93c044820e1b

日本にも地味に仕事あるらしいけど守秘義務で見えにくい

スーパーの古いレジ(POSシステム)で使われているのを見かけたのはNEC系のこれか?

http://tech.nikkeibp.co.jp/it/members/NT/JIREI/20011220/1/

比較的最近の話題はLispばりにスタートアップに活用されたこと

http://web.archive.org/web/20171111102557/https://thepedia.co/article/1068/

892デフォルトの名無しさん2018/03/29(木) 21:46:13.19ID:aMjJrqbe
>>890
> Smalltalkって業務で使ってるとこあるのかな
> LISP系よりはありそうなんだが

少なくともアメリカでは実アプリをSmalltalkで作ってるケースはほとんどないんじゃないと思うが
プロトタイプをSmalltalkでちゃっちゃと作ってしまい動作確認をするってのはアメリカでも昔からさほど珍しくないそうだが

ちなみにCommon Lispはアメリカでは以前から実用アプリの記述言語としてそれなりの頻度で使われてるよ

893デフォルトの名無しさん2018/03/30(金) 01:39:43.69ID:uMQPOtnG
>>880
スタックも含まないと継続にはならない

894はちみつ餃子 ◆8X2XSCHEME 2018/03/30(金) 04:37:04.64ID:AQ2aJRgB
>>893
Scheme 用語で言う「環境」のことな。
それを含まないから限定的と説明しているわけ。

895デフォルトの名無しさん2018/03/30(金) 07:19:01.27ID:wy67wuPJ
>>894
Cではと限定してんだから、普通にsetjmpと言ってほしいんだが…
IP(インストラクションポインタ)だけを指して限定的な継続言われても逆に分かりにくいと思うが

896デフォルトの名無しさん2018/03/30(金) 07:29:31.52ID:YaBZvbti
環境をあえて使わない継続の応用はあっても
環境を含むことができない機構を(「限定的」と断ったとしても)継続だと言い張るのはオカシイよ

897デフォルトの名無しさん2018/03/30(金) 13:49:13.71ID:a6Uq4iez
別に「限定継続/delimited continuation」ってものもあるしな
話がややこしくなるだけで理解の助けにならない

898はちみつ餃子 ◆8X2XSCHEME 2018/03/30(金) 16:49:52.67ID:AQ2aJRgB
Racket で escape continuation って言ってるやつと近いかな。

899デフォルトの名無しさん2018/04/08(日) 19:00:53.26ID:bJUCDaUD
schemeをjsに変換してreactやるとかelectronでGUIアプリ作るとかいう話ない?

900デフォルトの名無しさん2018/04/08(日) 19:55:46.10ID:e7Arryer
scheme->jsの変換は簡単そうだね
継続使ってなければ

901デフォルトの名無しさん2018/04/11(水) 08:57:34.76ID:smzFdsBm
そもそもJSにトランスパイルできる
まともなscheme処理系が無いだろう

902デフォルトの名無しさん2018/04/12(木) 03:16:46.76ID:dUBwD102
loopがマジでわからん。
どうしたらいい?

903デフォルトの名無しさん2018/04/12(木) 05:13:34.09ID:QxuUPFoE
loop マクロを自作してみる

904デフォルトの名無しさん2018/04/12(木) 07:42:04.41ID:w4rNP/ma
実践Common Lispで覚えた
formatも同じく

905デフォルトの名無しさん2018/04/13(金) 01:48:08.55ID:UkwKelSp
ocamlでさえjavascriptにコンパイル出来るというのにschemeも頑張ろうや

906デフォルトの名無しさん2018/04/14(土) 10:00:00.96ID:BMT8UCYv
Scheme -> Clojure -> javascript の順番に変換するなら、

Clojure -> javascript はすでに自動変換だし、

Scheme -> Clojure も define -> def 等、機械的な置き換えである程度出来るから、

単純なプログラムを変換することは出来るけど、それほど需要がないから無いんじゃないの。

907デフォルトの名無しさん2018/04/14(土) 14:14:27.78ID:Q/hh4lYx
つうかemscriptenで幾つかの実装が動いてるよね
ただそれだけで

908デフォルトの名無しさん2018/04/14(土) 17:47:52.07ID:BMT8UCYv
emscripten で C言語 -> javascript に変換が可能だから、Chicken で Scheme -> C言語 に変換すれば、
Scheme -> C言語 -> javascript が実行できるハズか。うまく通らないコードもあるだろうけど。

909デフォルトの名無しさん2018/04/16(月) 14:28:58.54ID:rldqSGZ/
>>908
そんなチキンなやり方が許されるとでも?

910デフォルトの名無しさん2018/04/16(月) 15:10:31.47ID:cjXJGsOK
>>908 >Chicken
>>909 >チキン
日本語でおk

911デフォルトの名無しさん2018/04/16(月) 17:37:30.38ID:Ao+0rxLU
なんだそのツッコミは

912デフォルトの名無しさん2018/04/22(日) 18:59:39.73ID:kgMcoKG3
なるほどもっとキチンとやれと

913デフォルトの名無しさん2018/04/22(日) 23:13:19.09ID:vfnhSJ7e
ところで「ブラウザでCLを動的にJSにトランスパイル可能なライブラリ」って聞いたら何が思い浮かびます?

914デフォルトの名無しさん2018/04/23(月) 13:04:48.19ID:h3LGX4rw
>>913 (loop) >>901

915デフォルトの名無しさん2018/04/23(月) 16:29:52.12ID:4n233aPE
>>914
ワロタww

916デフォルトの名無しさん2018/05/02(水) 09:24:55.05ID:Ofc9Qt+3
質問です!

動的スコープってスタックに積み上げるだけで実現できるじゃないですか
静的スコープってどうやって実装すればいいんですか?ヒント下さい

917はちみつ餃子 ◆8X2XSCHEME 2018/05/02(水) 12:49:52.49ID:g0SlpjdS
コンパイル (意味解析) 時にスタックを使えばいいんじゃないのかな。

918デフォルトの名無しさん2018/05/02(水) 13:03:03.19ID:Ofc9Qt+3
>>917
なるほど、意味解析時にスコープの構造をスタックで再現しといて
eval時に該当するスタックを参照できればいいってことですよね。

なんだか、ソースマップみたいですね。ひとつひとつのAtomに該当するスコープの参照を持たせるとなると、なんか重くなりそうですね

919デフォルトの名無しさん2018/05/11(金) 15:15:36.81ID:jYn7b+yh
Have you ever read The Little Schemer? => #t
Have you ever read The Seasoned Schemer? => #t
Have you ever read The Reasoned Schemer? => #t
Have you ever read The Little Prover? => #t
Have you ever read The Little Typer? => #f
What's The Little Typer? => Pie language book.

920デフォルトの名無しさん2018/05/13(日) 10:00:19.91ID:V4PsQf4P
David Thrane Christiansen のやっている Idris や Pie language といえば、
依存型 (dependent type) を使用した Type-Driven Development かな。
定理証明系の次の話題としては順当なところ。

921デフォルトの名無しさん2018/05/13(日) 10:10:02.10ID:fJNKI1KS
もうなんのことだかさっぱり

922デフォルトの名無しさん2018/05/13(日) 13:45:19.45ID:V4PsQf4P
依存型についてのテキストはこれまでにこういうのが出てるよ。
Edwin Brady "Type-Driven Development with Idris"
Adam Chlipala "Certified Programming with Dependent Types"
Aaron Stump "Verified Functional Programming in Agda"

Edwin Brady と David Thrane Christiansen は協力して Idris を作ったひとで、
今回、Christiansen が Racket 上で Pie language を実装したみたい。
Pie languageの実装を理解させる本が出ることで Type-Driven Development の
低レベルでの詳細が明快になると期待できる感じかな。

新着レスの表示
レス数が900を超えています。1000を超えると表示できなくなるよ。
レスを投稿する