Petite Chez Schemeをインストール

Chez Scheme Version 8.4 tar -xzvf pcsv8.4-ti3osx.tar.gz cd csv8.4/costom ./configure --installprefix=~/local --installman=~/local/share/man make make install すると petite と scheme-script がインストールされる。root権限にchownしようとした…

><>(Fish)に入門した

あらすじ ><>という難解プログラミング言語が某ゴルフ場に入ったので、入門した。言語の名前上、ググラビリティが非常に低く日本語の情報が見当たらなかったので、ここに日本語で自分の><>入門への道中を記す。あくまで初心者が調べながら書いた文章なので、…

任意の型の引数を無限に消費する空腹関数はHaskell(GHC)では書けないのか?

Schemeでいうと (define (hungry x) hungry) みたいなやつ。ここまではできた。参考: https://github.com/jstolarek/sandbox/blob/master/haskell/Hungry.hs Prelude> :set -XRankNTypes Prelude> data Hungry = Hungry { (%) :: forall b. b -> Hungry } Pr…

はじめてのQuineリレー

概要 昨日、自分自身を出力するHaskellプログラムを生成するOCamlプログラムを生成するSchemeプログラムを生成するRubyプログラムを生成するJavaScriptプログラムを生成するCプログラムを書いた。 #include<stdio.h> int main(){char*g="var p=print;p('puts %%^(form</stdio.h>…

enum型からその中の型へのキャスト

C++

enum型からその中の型へのキャストする underlying_cast を書いた。 #include <cinttypes> #include <type_traits> #include <array> #include <cstdio> template <class E> constexpr typename std::underlying_type<E>::type underlying_cast(E e) noexcept { return static_cast<typename std::underlying_type<E>::type>(e); } enum class Ki…</typename></e></class></cstdio></array></type_traits></cinttypes>

Cプリプロセッサマクロ挙動クイズ

C

#define STR(a) #a #define STR_(a) STR(a) #define CONCAT(a,b) a##b #define CONCAT_(a,b) CONCAT(a,b) #define M1(a) STR(CONCAT(a, __LINE__)) #define M2(a) STR_(CONCAT(a, __LINE__)) #define M3(a) STR(CONCAT_(a, __LINE__)) #define M4(a) STR_(CO…

method-missingを作ってみた

勢い余って「適用できるメソッドがなければ method-missing を呼び出す」機能を作ってみた. (define-generic method-missing) (define-class <method-missing-generic> (<generic>) ()) (define-method apply-methods ((gf <method-missing-generic>) methods args) (if (null? methods) (apply method-missing gf arg</method-missing-generic></generic></method-missing-generic>…

Hello, polyglot!

きっかけ: るびま これを読んでpolyglotするかーって思った. 今回のコンセプトは 初めてなのでやさしくHello, world! 好きな言語を盛り込む 140文字以下 以下,Schemeと言いつつGauche決め打ちである. ソースコード できあがったのがこれ. ;(#)={-"^<"v '…

Racketの継続プリミティヴ

Racketの継続がどうなっているのか,Racketのドキュメントを読みつつ分かったことをまとめる. (注意: この記事は継続の解説ではない.寧ろ継続自体は大体分かっている前提で進める) まず,主な継続プリミティヴについて簡単に説明する.次に,組み合わせた…

MIT/GNU Scheme 9.1.1

MIT/GNU Scheme - GNU Project - Free Software Foundation 今回は無気力なのとなんかいろいろあってよく分からないのでバイナリを入れた."Compiled on OS X 10.6" だし.x86-64のをダウンロードしてコピーして終わり. かと思いきやパスにコロンが入ってて…

s id id idに型が付かない件について

s id id idに型が付かない. ghci> let s f g h = f h $ g h ghci> :t s id id id <interactive>:1:5: Occurs check: cannot construct the infinite type: a = a -> b Probable cause: `id' is applied to too few arguments In the second argument of `s', namely `id'</interactive>…

TAPLを読む

「Types and Programming Languages」(通称TAPL)の訳本,「型システム入門 −プログラミング言語と型の理論−」を読んでいる.読書日記をつけるといいんじゃないかと思い立ったが面倒臭くなった.読み始めは2/4頃.10章まで読んだ. 序文に章の依存関係が載っ…

c-wrapperのインストール

c-wrapper,c-wrapper は更新されていないけど http://hg.koguro.net/c-wrapper で更新されていた.ダウンロード→タグからダウンロードできる. ./DIST gen ./configure CC=/usr/bin/gcc make DYLD_INSERT_LIBRARIES=/usr/lib/libffi.dylib make check普通に…

型クラスのパラメタ多相?

Either a b(但しaとbは何らかの共通の制約を持つ)に適用できる f g = either g g という関数を書こうとしたが,書けなかった.特定の型クラスに限定すれば書くことができる. {-# LANGUAGE RankNTypes #-} fshow :: (Show a, Show b) => (forall c. (Show c)…

パターンガードとGaucheのutil.match

最近のHaskellにはパターンガードというものがあるらしい. {-# LANGUAGE PatternGuards #-} addLookup alist x y | Just m <- lookup x alist , Just n <- lookup y alist = m + n | otherwise = 0 main = print $ addLookup [(1, 2), (3, 4)] 1 3 -- => 6 …

Ruby2.0.0をインストール

Ruby2.0.0-p195をインストール. makeすると gcc: installation problem, cannot exec '/usr/local/bin/i686-apple-darwin9-gcc-4.0.1': No such file or directory dtrace: failed to compile script probes.d: Preprocessor failed to process input progr…

Leopardにcabalをインストール

HaskellでParsecを使ってみようと思いつつインストールしようにも古代OS故にcabalが入っていないので諦めていたが,ぐぐったらcabalを手動で入れればいいらしいので依存ライブラリを入れていたらいつの間にかParsecが入っていた. というわけで,勢い余って …

動的環境を指定してthunkを呼ぶ

shift/reset と動的環境の関係についていろいろ考えていた時に出てきた副産物. (use util.match) (define (capture/de proc) (match (let/cc de (list (proc de))) ((r) r) (thunk (thunk)))) (define (with/de de thunk) (let/cc cont (de (.$ cont thunk)…

make-syntactic-closure の練習

(define-syntax alet1 (sc-macro-transformer (lambda (expr use-env) (let ((it-expr (cadr expr)) (var (caddr expr)) (expr1 (cadddr expr)) (body (car (cddddr expr)))) `(let ((it ,(make-syntactic-closure use-env '() it-expr)) (,var ,(make-synta…

make-syntactic-closure の free-names のイメージ

(make-syntactic-closure environment free-names form) の free-names は,let で包むイメージでいいんだろうか. (let ((x 1)) (let-syntax ((foo (sc-macro-transformer (lambda (expr env) (let ((var (cadr expr))) (make-syntactic-closure var (list …

マイナーカップキャラランク

ポケモン金銀のオリジナルルール「マイナーカップ」のキャラランクを適当に作ってみた. マイナーカップのルールはニンテンドウカップ2000を基準に以下の追加ルール: バタフリー スピアー ピジョット ラッタ オニドリル プクリン パラセクト カモネギ ベロリ…

Gaucheのリファレンスマニュアルをビルド

texi2html 1.70 が入っていたのだけどうまくいかなかった(1時間経っても終わらなかった)ので texi2html 1.82 をインストール.ソースのdoc下で make htmls で40秒程でできた.make html とするとひとまとめになったhtmlが出来上がる.texi2htmlの--splitオプ…

compute-cplを読む

Gaucheのclass.cより引用. /* * compute-cpl */ ScmObj Scm_ComputeCPL(ScmClass *klass) { ScmObj seqh = SCM_NIL, seqt = SCM_NIL, ds, dp, result; /* a trick to ensure we have <object> <top> at the end of CPL. */ ds = Scm_Delete(SCM_OBJ(SCM_CLASS_OBJECT), k</top></object>…

のゼロ元オブジェクトを作ってみた

(use gauche.collection) (use gauche.mop.singleton) (define-class <zero-collection-meta> (<singleton-meta>) ()) (define-class <zero-collection> (<collection>) () :metaclass <zero-collection-meta>) (define-method call-with-iterator ((class <zero-collection>) proc :key start) (proc (^ () #t) (^ () (err…</zero-collection></zero-collection-meta></collection></zero-collection></singleton-meta></zero-collection-meta>

R5RSの数値リテラルっぽいものをGaucheのparser.pegでパーズした(2)

前回から虚部の i の代わりに!も使えるようになったのとr進数(r>1)が使えるようになった.あと $try が足りない所があったので足したり.最早,R5RSの数値リテラルっぽいものではなくなってきている. 前回の36進数の虚部が汚いという問題.コメントも頂いた…

R5RSの数値リテラルっぽいものをGaucheのparser.pegでパーズした

R5RSの数値リテラルのサブセットを拡張したもののパーザをparser.pegで書いた.具体的には小文字しか使えないのと 123### を削って小数を10進以外でも書けるようにした感じ.あと36進数と指数マーカに^を追加. parser.pegはundocumentedでよく分からないの…

Scheme golf tips

あなごる用 Haskell golf の教科書を読んで「俺もこういうの書きたい!」と思って書いてみた.(思ってから書くまでに1年くらい経ってるけど) アマチュアゴルファーなので至らぬ所もありありだけど,今後のScheme界とあなごる界の盛り上がりを願ってこの文章…

Scalaでidを書こうとした

最初,無名関数で書こうとしたら,どうすれば多相的になってくれるのかわからなくて,ぐぐってたら名前を付ければいいということだった. ところが, scala> def id[T](x: T) = x id: [T](x: T)T scala> id _ res0: Nothing => Nothing = <function1> scala> (id _)(42) <console></console></function1>…

京都大学11月祭ぷよぷよ通大会

ふぁいやー(京都大学ぷよぷよサークル) 動画倉庫に参加. 有名人が少なかったので予選突破した.明日東大で大会があるらしくてその影響なんだとか. 予選16勝(勝率7割程度?),準決勝リーグ1勝6敗(2-13)で敗退. 予選15勝の人は延長戦があったようだ. 今…

Gaucheで素数ストリーム

エラトステネスの篩 (define (divisor? x y) (eqv? 0 (remainder x y))) (define-constant +primes+ (stream-cons 2 (stream-filter prime? (stream-iota -1 3 2)))) ;; (define (prime? n) ;; (not (stream-any (cut divisor? n <>) (stream-take-while (cu…