アセットの管理とサウンド

進捗 アセット管理とオーディオ機能、インプット機能の基本を作成中。 APIだけ気にしつつ、内部実装は少しずつ整理します。 アセット管理 アセットは単一のハッシュテーブルで管理するシステムを設計。 タグ付けでデータの分別が出来るようにする想定。 最初…

バージョン管理始め

gitで管理 ローカルでガリガリコードを書いていましたが、バージョン管理を始めました。 これまでの検証コードは一旦捨てて、一から書き直し始めています。 https://github.com/bis83/Bakeryプロジェクトの構成はbase, app, tool で切り分けて管理することに…

PC新設

進捗報告 今週は新規PCのセットアップと必要なパーツ購入をしていました グラボ新調したので久々にSkyrimを立ち上げてみる,最大設定にしてもぬるぬる動くのでさすが5年間でのスペックの進化はすばらしい 電源ユニット 購入した電源ユニットにEPS12V 8ピンが…

PCの選定

進捗報告 今週は別件で外出する予定があったため進捗はなし ここのところ進捗なしが続いているので、いい加減スケジュール管理しようか・・・ 5年モノのWindowsPCが不調になったため、パーツの取り替えを予定 PCパーツの取り替え マザーボードとグラフィック…

ライブラリオブジェクト化

進捗報告 所用で出払っていたため、今週はほとんど進捗なしです。 こういう時にも中身がなくても記録として記事にしておきます。 後に見直して、どの程度の頻度で作業に取り組まなかった週があるか見直すためです。 FFI 前回foreign-lambdaの話をしましたが…

ChickenにおけるFFI

進捗報告 描画周りの整備を開始・・・するも音の再生に比べるとやることが多いのでAPIを考え中 3Dはそんなに想定していないので、ひとまず2D描画をひとしきりそろえる所から始めたい予定 FFI 使いたいライブラリでネイティブに提供されているものは、 おおよ…

環境の注入

進捗 glfw, alureの初期化処理を用意 windowを表示してmain-loopを回せる 継続のおかげで、ループ中にinterruptシグナルを送ってインタプリタで処理をしてrestartで復帰できる 大抵のゲームシーンが{initialize}-{main}*-{terminate}のフローを通るのでどう…

ゲーム作ります

最近ほとんどLispに触れていなかったので、ゲームを作り始めようと思います。勉強記事だとブログの更新が出来なくなってしまう(Lisp以外の勉強ばかりしているため)ので、 進捗報告にすれば毎週1回でも少しずつ更新出来そうじゃないかと思い立ったからです。 …

10分だけNuを触ってみる

Nu というMac/iOS向けのLisp方言を触ってみました。 Objective-Cの機能をほぼ生で使用できるLispのようです。Programming Nu http://programming.nu/ インストールしてみる dmgでpkgが配布されているので、そのままインストールも可能。 当然、オープンソー…

call-with-valuesでfuncallを作る

最近更新していなかったので、小ネタを一つ。 (define-syntax funcall (syntax-rules () ((_ fn . args) (call-with-values (lambda () (values . args)) fn)))) call-with-valuesがcallを内包している手続きなので当然ですが・・・ funcallが基底にあって、…

型付ポインタ

2014年、明けましておめでとうございます。 新しい年になりましたので、早速Lispインタプリタを実装始めてみました。 実装にはC言語を利用しています。 ポインタの話 Lispは動的型付言語なのでポインタに型を持たせる必要があります。 現在の計算機だと物理…

case-lambda

Schemeにおける通常のlambda式は、引数は固定です。 しかし、時々引数の個数で挙動が異なる手続きを書きたくなるものです。 アリティ( 引数の個数 )でラムダ式のbodyをディスパッチできる機能が、 case-lambdaです。 case-lambda http://www.chino-js.com/ja…

数のお話

少し前にTwitterで話を振ったので、 補足としての記事を書こうと思います。 Lispでの数表現 理想的で(かつ一般的な)Lispの処理系は、 ここで記述するような数表現をサポートしているはずです。数の表現は処理系自体の実装を困難にしたり、 ハードウェアのス…

かぐや姫の物語

高畑監督の久々の新作ということもあって観に行きました。 以下、ネタバレ記事です。 竹取物語 竹取物語といえば、日本最古の物語として日本人なら殆ど誰でもあらすじを言える程、 有名な作品です。原作からして、非常に謎が多い作品で日本の古典文学よろし…

継続の話

継続とは、計算途中における「次の計算」を示す手続きのことです。 Schemeでは継続は第一級オブジェクトであり、 call-with-current-continuation手続きで 継続復帰手続きをいつでも取得することができます。継続はチューリング機械の時代から常に計算と共に…

多値の話

多値を言語的にサポートするのかという話。 手続きの返り値の話 多くの言語で手続きはn-in 1-outです。 これは関数適用の字面上自然なことで、継続に渡す値は1個にしか見えません。 (+ 1 2 (hoge) 4) hogeの関数適用は当然2個以上の値を返されても、 その継…

内部定義

内部定義(internal definition) Schemeの面白い記法の一つがinternal-definitionです。 (define (fact n) (define (fact-2 n m) (if (= n 1) m (fact-2 (- n 1) (* m (- n 1))))) (fact-2 n n)) ボディの先頭でのみ、defineを使うことで局所的な定義を行うこ…

Chicken Scheme Snippet No.1 : TCP他

Chicken Scheme Snippet 備忘録的に、ちょっとやりたい事をChicken Scheme用スニペットを書いていってみます。 TCP Socket http://wiki.call-cc.org/man/4/Unit%20tcp クライアント側。tcp-connectで接続するだけ。 (define-values (i o) (tcp-connect "loca…

BBを使ってGUI開発

Chicken SchemeでGUIを開発する 残念ながらSchemeは元々簡潔な言語仕様を目指しており、実用的な開発に必要な機能は不足しています。 Chicken Schemeは実用性重視ですが、ポータブル性を重視しているためGUIなどの環境依存機能は標準の言語拡張には含まれて…

Chicken Schemeを使ってネイティブアプリ開発

Schemeの話 今回はCommon Lispから離れて、Schemeのお話です。 Schemeとは、Lisp方言*1の一つで現代ではCommon Lispと並ぶ二大巨頭です。*2今回はSchemeの処理系の一つ、「Chicken Scheme」を紹介します。 Chicken Schemeとの出会い 私自身、このChicken Sch…

clozure cl

macbook airを購入したので、mac用に何か良いCommon Lispの処理系は無いかとみていると、clozure clがありました! Mac AppStore - Clozure CLClozure CLは元々MacOS向けのCommon Lisp処理系として開発されていたOpenMCLの後がまで、マルチプラットフォーム…

mini-sdl2のアップデート

mini-sdl2をversion1.0にアップデートしました。 https://github.com/bis83/mini-sdl2 主な変更点は、Imageローダーのインターフェイス修正と、キーコードの取得機能の追加です。これで当初予定していたSDL2を使う最低限なインターフェイスを構築することが…

mini-sdl2

mini-sdl2 mini-sdl2を作成しました。(ver 0.9) https://github.com/bis83/mini-sdl2 どういったもの? mini-sdl2はCommon LispでSDL2を利用するための補助ライブラリです。 SDL系のラッパーライブラリはいくつもありますが、今回もその一つになります。とい…

CFFIを使う

CFFIとは Common Lispと外部ライブラリを連携させるライブラリです。 http://common-lisp.net/project/cffi/主な用途は、 多くの処理系でサポートされているのでコードの移植性が高まる dllやsoといった外部ライブラリを読み込む Common Lisp外の関数や変数(…

symbol-macroの妙

今日は入門向けの内容ではなく、 Common Lispにある数あるマクロの一つ「シンボルマクロ」についてです。 symbol-macro 通常のマクロはfunctionのように呼び出しフォームの先頭に出現したときに動作します。 シンボルマクロはその逆に、シンボルとして出現し…

CL入門 No.7 - シンボルとパッケージ

SYMBOL プログラムを見てみると、 実はたくさんのシンボルが登場しています。 t => T (+ 4 2) => 6 (cons 'a 'b) => (A . B) tはなぜtなのか。+はなぜ加算演算になるのか。 consがなぜ新しいCONSセルを生成するのか。これら全てはSYMBOLによって解決されるの…

CL入門 No.6 - LISPの式

LISPの世界にようこそ Common Lispの基本的な使い方は覚えたでしょうか? この記事ではLISPの世界の基礎となる考え方を学習することを目的としています。 LISPとは wikipedia:LISPLISPとは「LISt Processing」を名前の由来とするプログラミング言語です。 LI…

CL入門 No.5 - Debugger, Inspector

Debuggerとは? Common LispではANSI Common Lispの仕様としてデバッガ機能*1の存在があります。 具体的な操作方法や機能に関しては処理系依存となりますが、 一般的によく利用されるデバッガ機能は標準規格化されています。 デバッガへの突入 プログラム中…

CL入門 No.4 - REPL

REPL? REPLとはRead-Eval-Print Loopの略称で、 ソースコードを一行読み、評価(実行)し、評価結果を出力するループ処理のことです。ほとんどのCL処理系が実行するとREPLが立ち上がります。 OSにおけるシェルのように、ユーザとCommon Lisp処理系が対話するた…

CL入門 No.3 - エディタ

Common Lispで開発していく Common Lispの代表的な処理系はREPL*1が搭載してあるので、 言語処理系のみで開発を進めていくことができます。*2またはLoad*3することで外部ソースコードを読み込むことができるので、 何らかのテキストエディタさえあれば、コー…