#:g1: #lang honuの紹介

Posted 2014-10-07 18:30:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の281日目です。

#lang honuとはなにか

 #lang honuは、Racketの構文拡張で、RacketがC/Java/JavaScriptの構文で書けるものです。

パッケージ情報

パッケージ名#lang honu
ドキュメントRacket: Honu

試してみる

 サイトのドキュメントにはソースコードに

#lang honu

と指定するとhonuの構文で書けるみたいなことが書いてありますが、自分が確認したところでは、githubのレポジトリから入手したものでないと標準状態では有効になりませんでした。

$ git clone https://github.com/plt/racket.git
$ cd racket
$ make unix-style PREFIX=/usr/local/racket # /usr/local/racket以下に配置する場合
$ /usr/local/racket/bin/racket -Iq honu
Welcome to Racket v6.1.0.8.             
> 42+42;
84

 下記のようなスクリプトを書いて実行属性を付ければ、シェルスクリプトとして実行も可能です。

#!/usr/local/racket/bin/racket

#lang honu

function fib (n) { if (n < 2) { n; } else { fib(n - 1) + fib(n - 2); } }

printf("fib(10) => ~A\n", fib(10));)

printfの中が%d等でないのがなんでなのという感じですが、良く考えればracketにはprintfがあるので、その流儀なのでしょう。

$ ./honu.honu
fib(10) => 55

 構文的には大体C/Java/JavaScript的なところですが、まだまだドキュメントが少ないようで、表記も揺れている様子。
今のところテストコードでも眺めてみるのが良いのかもしれません。

 マクロについては現在のところDylan風のパタンマッチによるマクロがあります。

macro dotimes ()
  {var:expression limit:expression body:expression}
  {syntax( for var in 0 to limit do body )}

dotimes x 8 { printf("Hello, ") printf("World!! ~A\n", x) } Hello, World!! 0 Hello, World!! 1 Hello, World!! 2 Hello, World!! 3 Hello, World!! 4 Hello, World!! 5 Hello, World!! 6 Hello, World!! 7

 honuについて詳しくは、論文や、動画があるので参照して下さい。

また、Chickenのeggsにもなっている様子。

まとめ

 今回は、#lang honuを紹介してみました。
Racketはなんでもやりますね。

comments powered by Disqus