タグ

Schemeに関するsonota88のブックマーク (37)

  • Scheme 処理系自作 (1) 動機と最初の実装

    モチベーションScheme 処理系を C 言語で自作していこうと思います(実用のためではなく、学習のためのなんちゃって処理系、程度のものです)。 Scheme 処理系を自作するのはこれが初めてではなく、これまでに二度ほど実装(というより写経)してみたことがあります。しかし、その度に何かしらの心残りがありました: C で実装(参考実装:kenpratt/rusty_scheme)C に慣れていなかった(というより今も慣れていない)ので、特にメモリ管理をどうすれば良いか方針を立てられなかった不慣れな C で実装したのは、当時読んでいた『ゼロからのOS自作入門』の MikanOS 上で動作させたかったから。実際に動作した雑に bdw-gc (Boehm GC) を導入してみたりしたが、それでもビジーループで大量のメモリを確保(数百MB単位)してしまう問題を解消できなかった(当時のツイート)最初は

    Scheme 処理系自作 (1) 動機と最初の実装
  • アルゴリズムとデータ構造入門|京都大学OCW

    コンピュータ上で計算を行うプログラムはデータ構造とアルゴリズムから構成される.講義では,プログラミングについてコンピュータサイエンスの立場から論じる。使用するプログラミング言語は Scheme であり、基的なプログラミングの概念について学ぶとともに、実際にプログラミングを経験することを通じて、プログラミングの質を習得することを狙う。 なお、講義では教科書の前半の話題を取り上げ、後半は「プログラミング言語」 (湯淺先生, 第2学年前期配当)で取り上げる。 1章 手続きによる抽象化 ( 3 回 ) 1.1章 プログラミングの要素 1.2章 手続きとその生成するプロセス 1.3章 抽象化の高階手続きによる形式化 2章 データによる抽象化 ( 4 回 ) 2.1章 データ抽象化とは 2.2章 階層データ構造と閉包性 2.3章 記号データ 2.4章 抽象データの多重表現 2.5章 汎用演算の

  • R5RSのformal semanticsをOCamlで書いた

    R5RSのformal semanticsをOCamlで書いた 背景 bitのバックナンバーを読んでいたら見つけた 「プログラム検証入門」という記事(1980年9月〜12月号掲載)が非常に面白かった。 その記事に参考文献として載っていた 「数理情報学入門―スコット・プログラム理論」というを買ってみたら、 これまたすごく面白かった。 こので使っている記号が、R5RSのformal semanticsで使っている記号と 大体同じであることを思い出し、R5RSのformal semanticsを読み直してみたら、 以前よりしっかり理解できて、これまた非常に楽しかった。 楽しかったのだが、 call-with-valuesの定義 がおかしいことに気づいた。 cwv: E* -> K -> C [call-with-values] cwv = twoarg(λε1ε2κ.applicate ε1

  • core.logicを使ってインデントされたS式を出力する

    インデントされたS式を出力したい Schemeとかでは欲しい場面がある。 自作ツールで整形されたS式を出力する マクロの展開結果をインデントした状態で見たい それから、きれいにインデントされるだけでなく、ある程度インデント幅や好みのスタイルを変更できるたり、ユーザ定義のマクロもうまくインデントされて出力できるようなツールが欲しい。 適切にインデントされたS式を出力する方法 ルールを設定して、条件を満たすものを出力すれば求めているものができそう。 例 ・ 1行は80行まで ・ let式のbinding部のインデントをそろえる ・ cond等のペアグループで空白をいれる(ペアグループのbody部が改行されている場合) こういったルールをKanrenとかのlogic programming系のDSLを使って記述して、条件に合致するパターンを解かせる。 Kanrenファミリー miniKanren

    core.logicを使ってインデントされたS式を出力する
  • Practical Scheme

    Shiro Kawai 7/3/2000初出、3/29/2002更新 まあとりあえずカッコは我慢しよう。ラムダとやらも、関数ポインタ+環境データ ということで納得しよう。しかし、Schemeのループ構文(do)は許せないなあ。 ごちゃごちゃしてるし、途中で脱出できないし。 CやPerlのforやwhileの方がずっと使いやすいね。 え? doなんて使わない? じゃあどうやってループを書くんだ? 消えるループ 簡単だけど、よくありそうな例として、こんなのを考えてみよう。 入力テキストの行数を数える関数count_linesを書きたい。 Cで書くとすれば、こんな感じだ。 /* 例1 */ int count_lines(void) { int count = 0, c; for (c=getchar(); c!=EOF; c=getchar()) { if (c == '\n') count+

    Practical Scheme
  • GitHub - namin/inc: an incremental approach to compiler construction

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - namin/inc: an incremental approach to compiler construction
  • Scheme to x86コンパイラ

    Schemeコードをx86アセンブリにコンパイルする、トイコンパイラの紹介 https://github.com/nobutaka/nanopass

    Scheme to x86コンパイラ
  • お気楽 Scheme プログラミング入門

    これらの命令は Henderson の SECD マシンを参考にしていますが、まったく同じではありません。micro Scheme の仕様にあわせて、新しい命令を追加したり不要な命令を削除しています。なお、今回作成する micro Scheme の仕様は、拙作のページ「Scheme で作る micro Scheme」で作成したインタプリタと同じです。また、今回のプログラムでもエラーチェックはほとんど行っていません。あしからずご了承ください。 命令の動作は 4 つのレジスタ (S, E, C, D) の状態遷移で表すことができます。ここで、各命令の動作について詳しく説明することにしましょう。各レジスタの値はドットリストで表すことにします。 ●ld ld はレジスタ E から局所変数の値 v を求めてスタックに積む命令です。 s e (ld (i . j) . c) d => (v . s)

    sonota88
    sonota88 2020/07/09
    SECD 仮想マシン
  • RaccでSchemeパーサを作る - 趣味的にっき

    3/2(日)の生駒読書会#2に向けて、Schemeのパーサを準備しておこうと思って作ってみました。なんちゃってSchemeで遊ぶくらいなので、機能はまだまだ足りません。R5RSと見比べると足りないのはだいたいこんな感じかな。 ペア。 文字。 n進数。小数。複素数。 quote。 ベクタ。 マクロ関係。 文字列の中の"。 ファイル: list_parser.y # Local Variables: # mode: ruby # compile-command: "racc -o list_parser.rb list_parser.y" # End: class ListParser rule atoms : | atom atoms { result = List.new(*val) } atom : IDENT | BOOLEAN | NUMBER | STRING | list lis

    RaccでSchemeパーサを作る - 趣味的にっき
  • OCamlで48 Hour Schemeをやってみる その1 (第一章〜第三章前半まで) - Arantium Maestum

    こういうことを言ってしまった: これは宗教勧誘とかじゃなくて真面目に言うんですが、Lisp(処理系)ってある程度書けるようになるまでの学習コストがとても(?)低い。 https://t.co/OQPte4lm4I— zehnpaard (@zehnpaard) June 14, 2019 発言に責任を持つためにもOCamlでLisp処理系を実装してみようと思う。 幸いHaskellで簡単なLisp処理系を実装するためのチュートリアルが存在する: en.wikibooks.org 昔Haskellを触っていた時に試して大変面白かった。これをOCamlに移植してみる。 第一章 まずは第一章でとりあえずテキストを表示できるプロジェクトを作ってコンパイルするところまで: github.com あまりコメントするべきことはない。ビルドツールにduneを使っているのでdune exec bin/ex.

    OCamlで48 Hour Schemeをやってみる その1 (第一章〜第三章前半まで) - Arantium Maestum
  • GitHub - google/schism: A self-hosting Scheme to WebAssembly compiler

    Schism is an experimental compiler from Scheme to WebAssembly. It enables developers to run programs written in Scheme in the browser or server environments such as NodeJS. The compiler supports a subset of the R6RS version Scheme, and is self-hosting, meaning Schism is implemented in Schism itself. This is not an officially supported Google product. Development so far has focused on features nece

    GitHub - google/schism: A self-hosting Scheme to WebAssembly compiler
  • リトルウイングピンボール オフィシャルサイト:ビデオピンボール第4世代のために開発された究極のスクリプト言語システム「イプシロン」

    ビデオピンボール第4世代のために開発された究極のスクリプト言語システム「イプシロン」 Ypsilon Scheme System(以下イプシロン)は、リトルウイング ピンボールコンストラクションシステムの基盤技術の一つとして藤田善勝が開発したスクリプト言語システムです。イプシロンは、YoshikatsuからYを取って名付けました。 プログラミング言語としてイプシロンはLISPの方言の一つであるスキーム(Scheme)を採用しています。スキームは1970年代に開発され、コンピュータとプログラミングの教育分野で広く使われています。 スキームについての情報はこちらをご参照ください。http://ja.wikipedia.org/wiki/Scheme ピンボールのゲームルールは現在CまたはC++で記述されています。速度の面では有利なのですが、プログラムにエラーがあるとあっけなくアプリケーションが

  • Schemeファンのための『ゲームエンジン・アーキテクチャ』立ち読みガイド - .mjtの日記復帰計画

    (文p292。) ゲームエンジン・アーキテクチャはノーティドッグ(NDI)のエンジニアが書いたゲーム開発のかなり広範なトピックを扱った書籍の日語訳。 http://www.sbcr.jp/products/4797377484.html http://minahito.hatenablog.com/entry/2015/03/28/183822 https://timagire.wordpress.com/2015/04/02/ NDIにはかなり深刻なLisp文化が有る: http://d.hatena.ne.jp/mjt/20131027/p1 RacketCon 2013でのプレゼン https://twitter.com/okonomiyonda/status/479429000842850304 GOAL(彼らの歴史的なLispバリアント言語)のドキュメント表紙画像 このはか

    Schemeファンのための『ゲームエンジン・アーキテクチャ』立ち読みガイド - .mjtの日記復帰計画
  • つくって学ぶプログラミング言語 RubyによるScheme処理系の実装

    プログラミングをより深く理解するための近道は、プログラミング言語を実装してみること。SchemeのサブセットをRubyで実装していくことで、プログラムはどう実行されるのか、その基がはっきり分かります。 ※書はCC BYにより配布されています。上記の「買い物かごへ」ボタンからは有償で購入できます。無料で入手したい場合は、下記リンクよりダウンロードしてください。なお、有償版も無償版も内容は同一です。 EPUB版PDF版内容紹介プログラムは書けても、その基礎となっている計算機科学(コンピュータサイエンス) の理解があやふやな人を、著者は多く見てきました。プログラミングに自信があるという人が、もう一歩先に進める道を示したいというのが、この文書を書き始めた動機です。 この文書を読むことで次の効果が得られることを期待しています。 プログラミング言語とは何かを深く理解することで、プログラミングのレベ

    つくって学ぶプログラミング言語 RubyによるScheme処理系の実装
  • 「つくって学ぶプログラミング言語 RubyによるScheme処理系の実装」最速レビュー

    つくって学ぶプログラミング言語 RubyによるScheme処理系の実装【電子書籍】 渡辺昌寛 達人出版会 発行日: 2013-04-15 対応フォーマット: PDF 詳細を見る 私は修論のために並列Schemeを作ったことがある。名前はSucheme。ユーザ名のsuchiにかけたんですね(うへえ)。テーマ曲はHISの「あなたがスキー」とほぼ同じ「あなたがSucheme」だった(この曲の冬美さんはいいですよ、オススメ)。 R4RS準拠でAppendixのマクロまで1ヶ月くらいかけて実装してとても楽しかった。最終的にC言語とschemeのコードで1万行くらいの規模になったと思う。字句解析のコードは、状態遷移を当時「C MAGAZINE」のP.J.Plaugerさんの連載に載っていた「gotoを使ってエレガントにする方法だってある」というような主旨のswitch-caseとgotoで書く変な書き

    「つくって学ぶプログラミング言語 RubyによるScheme処理系の実装」最速レビュー
  • 48時間でSchemeを書こう - Wikibooks

    Web上にあるほとんどのHaskellチュートリアルは言語についてのマニュアルのような教え方をしようとしているようです。それらには言語の文法、概念が少し載っていて、読者に対話環境でいくつかの簡単な関数を作るように指示します。よく機能する有用なプログラムの書き方は大抵最後にまわされるか、そもそも省かれていたりします。 このチュートリアルは違う方針を取ります。コマンドライン引数解析から始めて、完全に機能するR5RS Schemeのかなり大きなサブセットの実装まで進みます。道すがら、Haskellの持つI/O、mutable state、dynamic typing、エラー処理、そして構文解析機能を学びます。このチュートリアルを終える頃には、あなたはHaskellとScheme両方がかなり良くわかるようになっているはずです。 このチュートリアルの対象読者は主に以下の2種類です。 LispかSch

  • (define 独学 再帰) - 書評 - 素数夜曲:女王陛下のLisp : 404 Blog Not Found

    2012年07月16日01:45 カテゴリ書評/画評/品評Math (define 独学 再帰) - 書評 - 素数夜曲:女王陛下のLisp 素数夜曲: 女王陛下のLISP 吉田武 出版社より献御礼。 夏休み一つかけて取り組みたい吉田独習が、これでまた一つ。 404 Blog Not Found:This is THE -e^πi - 書評 - オイラーの贈物 新装版 404 Blog Not Found:伝われ、i - 書評 - 虚数の情緒 しかし、今度は紙と鉛筆に加えて、パソコンのご用意も。 書「素数夜曲」は副題が「女王陛下のLisp」なのだが、実質「素数夜曲」と「女王陛下のLisp」の合冊だといってよい「付録」となっている後者の分量は、「主題」のそれを上回る。 目次 - 東海大学出版会|書籍詳細>素数夜曲より 増補改訂版・序 第0夜 梟は黄昏に飛翔する 第1夜 素数のメロディー

    (define 独学 再帰) - 書評 - 素数夜曲:女王陛下のLisp : 404 Blog Not Found
  • Island Life - 継続の起源

    About 南の島のプログラマ。 たまに役者。 Practical Schemeの主。 WiLiKi:Shiro 最近のエントリ 米国の大学進学無限cxr高校受験Defense振り返ってみると2019年は色々学んで楽...覚えるより忘れる方が難しい(こともある)眼鏡のつると3DプリンタIris Klein Acting ClassSAG-AFTRA conservatory: Voice Acting創作活動って自分を晒け出さねばならないと...More... 最近のコメント Jessica Kirkpatrick on CLtL2 (2025/06/28)shiro on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/14)1357 on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/01)ベアトリーチェ on ハイポハ

    Island Life - 継続の起源
  • 「Guile Schemeは最良の拡張言語だ」という主張 | スラド デベロッパー

    Schemeベースのプログラム言語の1つに、「GNU Guile」がある。Guileはアプリケーションの機能を拡張するためのスクリプト言語として開発されたものの、利用しているソフトウェアは少なく、現在ではPythonJavaScriptなどが多く使われる状況だ。しかし、家/.で「Guileは、ユーザーが少ないものの、GNUに最も適した拡張言語である」と主張する記事が話題となっている(家/.記事)。 2011年のGNU Hackers Meetingにおいて、Guileのメンテナの1人であるAndy Wingo氏は自身のブログで、JavaScriptとの比較を行うことで「GNUソフトウェアの拡張目的で他のプログラミング言語を使用するのは間違っている」ことを説明している。 JavaScriptはWebブラウザ向けの言語であり、GNUソフトウェアとの関連性が低くく、POSIXのような一般的

  • Scheme Droid - Apps on Google Play

    sonota88
    sonota88 2011/07/18
    R4RS, JScheme