プログラミングをより深く理解するための近道は、プログラミング言語を実装してみること。SchemeのサブセットをRubyで実装していくことで、プログラムはどう実行されるのか、その基本がはっきり分かります。 ※本書はCC BYにより配布されています。上記の「買い物かごへ」ボタンからは有償で購入できます。無料で入手したい場合は、下記リンクよりダウンロードしてください。なお、有償版も無償版も内容は同一です。 EPUB版PDF版内容紹介プログラムは書けても、その基礎となっている計算機科学(コンピュータサイエンス) の理解があやふやな人を、著者は多く見てきました。プログラミングに自信があるという人が、もう一歩先に進める道を示したいというのが、この文書を書き始めた動機です。 この文書を読むことで次の効果が得られることを期待しています。 プログラミング言語とは何かを深く理解することで、プログラミングのレベ
About 南の島のプログラマ。 たまに役者。 Practical Schemeの主。 WiLiKi:Shiro 最近のエントリ 米国の大学進学無限cxr高校受験Defense振り返ってみると2019年は色々学んで楽...覚えるより忘れる方が難しい(こともある)眼鏡のつると3DプリンタIris Klein Acting ClassSAG-AFTRA conservatory: Voice Acting創作活動って自分を晒け出さねばならないと...More... 最近のコメント shiro on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/14)1357 on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/01)ベアトリーチェ on ハイポハイポハイポのシューリンガン (2022/04/02)ベアトリーチェ on ハイポハ
Web上にあるほとんどのHaskellチュートリアルは言語についてのマニュアルのような教え方をしようとしているようです。それらには言語の文法、概念が少し載っていて、読者に対話環境でいくつかの簡単な関数を作るように指示します。よく機能する有用なプログラムの書き方は大抵最後にまわされるか、そもそも省かれていたりします。 このチュートリアルは違う方針を取ります。コマンドライン引数解析から始めて、完全に機能するR5RS Schemeのかなり大きなサブセットの実装まで進みます。道すがら、Haskellの持つI/O、mutable state、dynamic typing、エラー処理、そして構文解析機能を学びます。このチュートリアルを終える頃には、あなたはHaskellとScheme両方がかなり良くわかるようになっているはずです。 このチュートリアルの対象読者は主に以下の2種類です。 LispかSch
勾配の緩やかな初心者向け Scheme 入門ページです。 コンピュータは使ったことがあるが、プログラミング経験があまりない人を想定しています。 Scheme の解説はすでに山ほど優れたものがありますが、あえて解説記事を書いてみました。 Scheme のような抽象的な話題は波長が合えばすんなりと理解できますが、あわないと全く理解できません。 他の解説を読んで今ひとつよく理解できなかった人は試しに読んでみてください。 この記事の目標はコンピュータ科学の教科書の決定版である SICP を読める程度の Scheme の知識を提供することです。 目次: 処理系のインストール Scheme を電卓代わりに使う リストを作ろう 関数を定義しよう 分岐 局所変数 繰り返し 高階関数 入出力 代入 文字、文字列 シンボル型 連想リスト、ハッシュ表 ベクトルと構造体 構文の定義 (マクロ) 継続 遅延評価 非
ついに、Write Yourself a Scheme in 48 Hoursをやりました。 分ったこと 以下のことが、なんとなく分ったり、少なくともどう使うのかを体験できました。 エラー処理 正常系の値と異常系の値を包含する型を作って、Scheme の関数はそれを返すようにする モナド変換子 クロージャの実装 コードの問題点 ファイルとして置いてあるコードですが、以下のような小さな問題があります。 2箇所Texのコマンドが残っている parseString = do char ;\textcolor{string}{\texttt{'"'}}; cdr の定義が間違っている cdr [DottedList (_ : xs) x] = return $ DottedList xs x cdr [DottedList [xs] x] = return x は誤りで、正しくはこう。 cdr [
最近、Scheme がちょっとした流行になっているようです。 Scheme を勉強しようと思っている人に、僕が声を大にして薦めたい本は、「The Little Schemer」です。 The Little Schemer (The MIT Press) 作者: Daniel P. Friedman,Matthias Felleisen出版社/メーカー: The MIT Press発売日: 1995/12/21メディア: ペーパーバック購入: 10人 クリック: 137回この商品を含むブログ (91件) を見る 1章から7章にかけて、たくさんの例題とともに「再帰」が説明されています。「再帰の再帰」も勉強できます。実際、「この本を読んで人生が変わった」という感想を何回か聞いたことがあります。なぜなら、物事を再帰で考えられるようになるからです。再帰が分らない人は、ぜひ読んで下さい。 8章は、「ク
めでたい! 「Scheme 手習い」が復刻しました。正確に言うと、復刻ではなく、新しい版に基づいた新しい訳です。 Scheme手習い 作者: Daniel P. Friedman,Matthias Felleisen,元吉文男,横山晶一出版社/メーカー: オーム社発売日: 2010/10/22メディア: 単行本(ソフトカバー)購入: 5人 クリック: 129回この商品を含むブログ (34件) を見る 以前、マグロウヒル出版から出版されていた「Scheme手習い―直感で学ぶLisp」は、"The Little Lisper" の訳です。内容が、Common Lisp でもなく、Scheme でもない Lisp の方言によって書かれているのに、邦題に Scheme が入っていたのは、この本の唯一の欠点だと僕は感じていました。 今回は、"The Little Schemer" の訳です。原書も訳
Peter Norvig / 青木靖 訳 このページには2つの目的がある。コンピュータ言語の実装について一般的な記述をすることと、Lispの方言であるSchemeのサブセットをPythonで実装する具体的な方法を示すことである。私はこのインタプリタをLispy (lis.py)と呼ぶ。何年か前に私はJavaとCommon LispでSchemeインタプリタを書く方法を示した。今回の目標は、アラン・ケイが「ソフトウェアのマクスウェル方程式」と呼んだところの簡潔さと取っつきやすさを可能な限り実現するということだ。 SchemeのサブセットLispy の構文と意味論 コンピュータ言語の多くは様々な構文的な決まり(キーワード、中置演算子、カッコ、演算子優先順、ドット記法、セミコロンなど)を持っているが、Lisp族言語の1つとして、Schemeの構文はすべてカッコ付きの前置記法であるリストを基本とし
以下メモ. やりたいこと.C 文字列 (ヌル終端) を Scheme コード片として評価し,結果を C 文字列の形で受け取る. C 文字列 (とりあえず,コマンドライン引数として与えている) を評価して,結果を標準出力に書き出すまではできた. $ gauche-config -I -I'/usr/lib/gauche/0.8.7/include' $ gauche-config -L -L'/usr/lib/gauche/0.8.7/i486-pc-linux-gnu' $ gauche-config -l -lgauche -ldl -lcrypt -lutil -lm -lpthread $ tcc -I/usr/lib/gauche/0.8.7/include /dev/stdin -L/usr/lib/gauche/0.8.7/i486-pc-linux-gnu -lgauche
すべてのMicrosoft 製品 GlobalMicrosoft 365 Teams CopilotWindows Surface Xbox 新生活応援セール 法人向け サポート ソフトウェアWindows アプリAI OneDriveOutlook SkypeOneNoteMicrosoft TeamsPC とデバイス Xbox を購入する アクセサリVR & 複合現実 エンタメ Xbox Game Pass Ultimate Xbox とゲームPCゲームWindowsゲーム映画とテレビ番組 法人向けMicrosoft CloudMicrosoftSecurity Azure Dynamics 365 一般法人向けMicrosoft 365Microsoft IndustryMicrosoft Power PlatformWindows 365
Scheme 過去◇現在◇未来 前編 bit/April 1996/Vol. 28, No.4 p4~9 Guy L. SteeleJr. 訳 井田昌之 ---------------------------------------- はじめに ――― 訳者より Schemeの開発者の一人であるGuy L. Steele博士が、1995年7月10日にLisp協議 会のシンポジウムで講演を行なった。場所は青学会館である。本稿は、その講 演を元にまとめたものである。その内容は、開発の当事者でしか語れないもの が多く、たとえば、Schemeの発端のいきさつには、Carl Hewitt先生も大きく関 係している点など、訳者にとっても、なるほどと新鮮で興味深いものであった。 当時のMITの人工知能研究所のホットな様子を垣間見た気がした。本文では敬称を略した。登場人物の肩書はどんどん変化したので、
Chaton (pronounced like [sha-ton], a 'kitten' in French) is asimple Comet-based Webchat server written in Gauche. Originallyit is developed to host a successor of Gauche chat room on Lingr ( http://www.lingr.com ), when Lingr announced to terminateits service. Although Chaton neveraims at serving in such a large scale and with tons of features like Lingr, the "look and feel" of the interface s
Scheme初心者へのアドバイスを書いてみる - ヤドカリデンキ商会(第一倉庫)にインスパイアされて書いてみた. ネタだからね真に受けないでね. お題はServererror トップダウンに考える 部品からいきなり作ってはいけません.その部品にひきずられてしまいます.トップダウンに考えます. トップレベルの駆動手続 run を考えましょう.run は情報をもらって,結果を出力というのでよいでしょう.入力情報は対戦回数,結果は対戦結果の集計になるかな. (define (run n) 'undefined) とりあえずインタフェースはこれでよし.で,n 回で対戦 game を繰り返すから,くりかえし回数,対戦結果の集計の初期値,そして対戦手続があればよさそう. (define (run n) (iter/count game '(0 0 0) n))) (define (iter/coun
SML という言語のテキストを読んでいて、これまで自分がカリー化という言葉をよく理解せずに使っていたことに気付きました。 どうやら部分適用の概念と混同していたようです。 一般に、ML や Haskell のような関数型言語においては、カリー化とは n 要素タプルを取る関数 fun f (x,y) = z を、n 引数関数 fun curried_f x y = z に変形することと同義らしいです。(n > 1, z は適当な式とします) ML 等では n 引数を取る関数 fun f x1 x2 ... xn = z (* 1 *) は、実体としては次のように1引数関数が n 個連なったものとして定義されています。 val f = fn x1 => fn x2 => ... fn xn => z (* 2 *) (1 と 2 は同値であり、1 は 2 の構文糖衣に過ぎません) f は、最初の
ML とか Haskell のコードを読む時に私がどうしても憧れてしまうのが、自動的にカリー化定義される関数です。 Scheme にもカリー化関数を定義する構文自体は存在します (処理系にもよるでしょうが)。 例えば、このようなラムダ式のネストで定義された関数を (define add3 (lambda (a) (lambda (b) (lambda (c) (+ a b c)))))次のようなスタイルで短く書くことができるんです: (define (((add3 a) b) c) (+ a b c))でも全然自動的ではないですし、必ず定義した通りに適用しなければいけません: (((add3 1) 2) 3)2番目と3番目の引数を同時に与える、とかは出来ないわけです。 そこでちょっと知恵をひねりまして、case-lambda を使って、あらゆる関数適用のパターンに応じたラムダ式をあらかじめ
Haskellの有名な特徴として、関数が勝手にカリー化されるという点があります。 要するにHaskellの関数は常に部分適用可能になっていて、f foo bar bazという関数適用は(((f foo) bar) baz)と解釈されています。これは非常に強力な機能で、汎用的な関数を目的に合わせて簡単に特殊化することができます。 Schemeやその他のLispでは、引数は必ず同時に与えないといけないので、カリー化したものを作ろうとするとクロージャを使って(define f (lambda (x) (lambda (y) (lambda (z) ...))))とでもしなければなりません。しかも呼び出すときには(((f foo) bar) baz)と、1つずつ順番に適用する必要があります。 私が欲しいのは、"(Haskellが透過的にやっているように)与えられた引数を先頭から順に束縛し、足りない
Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう(編集部) 「Gaucheでメタプログラミング」と題して、これからGaucheを使ったプログラミングの連載を書かせていただきます吉田裕美です。よろしくお願いいたします。 Gaucheとは 今回の連載で取り上げるGaucheはハワイ在住の日本人ハッカー、川合史朗さんが作った、Lispの一種であるSchemeのオープンソース処理系です。 Gaucheの特徴は、PerlやRubyのように気軽に使える軽い処理系だということです。Perl同様に正規表現や文字列操作が行え、ちょっとしたツールの作成にも使えます。しかし、非常に強力なCommon Lisp風オブジェクトシステムを持ち、Lispならではのマクロに加え、Webやグラフィックスなどの豊富なライブラリも持っているので実用
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く