タグ

javascriptとschemeに関するhikazohのブックマーク (3)

  • JavaScriptにSchemeを実装する - Qiita

    この記事は完成していません 更にコードに誤りがあったりして修正されていなかったりするので、一度整理されるまで落とすかもしれません この記事の内容 プログラマが美しい言語を求めて最終的にたどり着く言語、LISP。 プログラミング言語を作るということは、難しいと思われがちですが、実際のところ読み取った文字列を解釈するプログラムを作成するだけで独自の言語を作ることができます。 ただし、プログラミング言語として利便性を実用レベルまで持っていくのは通常、容易ではありません。しかし、Schemeであれば比較的実装が簡単かつ高度な言語を作ることができます。 Schemeはシンプルさとパワフルさの両方を兼ね備えたLISP方言の言語であり、ミニマルな仕様から世界で最も実装される言語です。今回はそんなSchemeをJavaScriptに実装します! 最終的な目標は、ブラウザにCUIを表示して対話形式でSche

    JavaScriptにSchemeを実装する - Qiita
  • JavaScriptのAwaitはcall/ccだということ。 - できる気がしてきた。

    Schemeの継続について調べると、なんだか「簡単」って言いつつ難しい説明をしてる記事が多いですが、実は普段から僕達は継続を使っています。 たとえば次のコードはES7とSchemeで書かれた”Hello"と表示するプログラムです。 (define (say) (display (call/cc (lambda (c) (c "Hello"))))) (say) async function say() { console.log(await new Promise(c => { c("Hello"); })); } say(); どちらのcも関数です。そしてcは継続と呼ばれていて次の処理を意味しています。 しかし、JavaScriptの場合はこのcをresolveなどと書いて、成功した時にreturnのように扱えるものとして紹介されていますね。 ところで、残念ながら(?)JavaScrip

    JavaScriptのAwaitはcall/ccだということ。 - できる気がしてきた。
  • BiwaSchemeのためにCPS(継続渡し形式)でマージソートを実装した話 - yhara.jp

    記事は言語実装 Advent Calendar 2016の最終日の記事です。話題が多岐に渡っていて楽しいアドベントカレンダーでしたね。前日はEgisonのリーマン幾何学用記法の話でした。 BiwaSchemeは筆者が作っているJavaScriptによるScheme実装です。先月の話ですが、list-sortという関数を修正し、比較に使うScheme関数を受け取れるように改善しました。BiwaSchemeは中間言語方式(VM方式)かつライブラリを全てJSで実装するという方針になっているため、実装に少し工夫が必要でした。稿ではそのことについて解説します。 中間言語方式 JavaScriptでScheme処理系を実装する場合、いくつかの方針が考えられます。 インタプリタ方式 (S式を一つずつ読み、評価する) コンパイラ方式 (プログラム全体を等価なJavaScriptに変換する 中間言語方式

  • 1