灘校パソコン研究部(NPCA)に
おけるLISPの活用について

2013/11/21

中西 航
(灘高等学校2年)
概要
 自己紹介

 NPCAとは?
 NPCAでのLispの活用
自己紹介
自己紹介
 中西航

 灘高等学校2年生
 NPCA部員
 @stibear1996

 Lisp歴は21ヶ月(2年弱)
 ILC2012に参加
 最近はもっぱらCommon Lispですが,
R7RSはとても気になる
 メタプログラミング,人工知能などに興味
NPCAとは?
What’s NPCA
 Nada Personal Computer users’







Association の略
灘校パソコン研究部
灘中学校・高等学校のパソコン部
部員 中学生:70名 高校生:36名
主に昼休み,放課後に活動
HP: http://www.npca.jp/
活動(2013)














パソコン甲子園にて部員2名のチームが4位に入賞
Facebook CTFにて部員2名のチームが6位に入賞
SECCON 四国大会にて部員4名のチームEpsilonDeltaが優勝
第34回U-20プログラミング・コンテストにて部員1名が経済
産業大臣賞を受賞
SECCON2013にて部員1名が4位入賞
セキュリティ・キャンプ 2013に1名が参加
オープンソースカンファレンス京都 2013にて講演、展示
第7回アジア太平洋情報オリンピックにて部員1名が銀メダ
ル獲得
第67回灘校文化祭
NPCA Programming Contest Alpha #02を開催
日本情報オリンピック本選にて部員1名が銀メダル獲得、1
名が地区優秀賞を獲得
部員4名が情報オリンピック日本代表選考合宿参加権を獲得
部内鍋パーティーを開催
活動
 主にプログラミング
 他にも,DTM,3Dモデリング,サーバ管理,








技術書の読書会,講義,etc…
対外活動(KOF, OSCなどのイベント参加)
不定期開催のLT大会
花見,合宿,クリスマスぼっち会など,
福利厚生も充実
最近は活動が多様化
後輩への技術継承など,課題は山積
プログラミング
 部員それぞれが思い思いに作りたいものを







作る
成果物は,文化祭や,KOF(関西オープン
フォーラム),OSC(オープンソースカン
ファレンス)などで発表
例えば,chat bot,ジャッジシステム,自
然言語翻訳など
後輩への講義も
また,今年は勉強会など互いに研鑽しあう
イベントも
プログラミング
 言語
 Lisp,Ruby,Python,Haskell,Coq,Lazy K,

C/C++(順不同)など…
 それぞれ思い思いの言語を使用

 Linux,Windows,OS X など各種OSで開発

 後輩にどの言語を教えるかは長年の課題
 押し付けるわけにもいかないため,なかな
か難しい
サーバシステム
 Xeon機 3台

 Core2機 2台 (うち1台自作)
 Celeron機 5台
 その他 3台

 Windows ServerやCent OSなど
 仮想機上にはUbuntu Serverも
部運営
 部員の情報はデータにして管理
 Redmineでタスク・進捗管理

 チケットに追い立てられる日々
 定期的な部会の開催
 会計に申し立てると好きな本が
 TaPL,プログラミングコンテストチャレンジ

ブック,SICP などなど
文化祭
 毎年GW中に2日間

 1年の集大成
 部誌,展示,ステージ企画
 前日デスマをする部員も

 今年度の部誌の圏論の記事は話題に
 今年からは部誌もGitlabで管理

 部員のスキルアップが望める
外部サービス
 Webサイト

 ブログ
 NPCA Judge

 NPCA CTF(予定)
内部向けサービス
 NCAPA(Redmine)

 Gitlab
 リモートアクセス(VPN)
 書籍貸出し
 NPCA Wiki(予定)
福利厚生








花見
合宿
鍋パーティー
クリスマスぼっち会
エナジードリンク低価格販売サービス
寝袋
ドリンクサービス
 紅茶,コーヒー,烏龍茶,コンソメスープ,味噌

汁

 信仰の自由
NPCAでのLispの活用
とはいえ…
Lisper
 実質私1人

 布教により高1に1人増えた
 LT大会や講義など,日々布教に努める
 が,なかなか成果は上がらず

 Schemeなら使えるという人間は何人か
 昔はOBが何人か使っていた(らしい)

 中1に期待
Chatbot
 部のSkype部屋で走っている

 Written in Common Lisp
 「ロイディ」を参考にした
 Skype Desktop APIが廃止されるらしいの

で,存亡の危機
 言行録はTumblrに
合宿
 ハッカソンにて,ブラウザゲームを作る

ことに
 それぞれ,
 中1がCでコンソールアプリケーション

 中2がJavaScriptでWeb UI
 私がCommon LispでWebサーバ

 を担当

 一晩ではさすがに間に合わず…
部誌
 今年の文化祭では,Lispのマクロ(特に







Common Lisp)について扱った
打ち上げにてOB(wasabiz氏)にけしかけられ,
Schemeの健全なマクロについて書くことに
夏休み中,名古屋ででこれき氏に会い,
アドバイスを仰ぐ
Kyoto.Lisp TT #2で宣伝
鋭意執筆中
健全なマクロ
 SchemeはLisp-1

 名前衝突はより深刻な問題
 回避する必要性→健全性
Schemeのマクロ
 syntax-rules,syntax-caseしか知らな

かった
 他にも







Syntactic closure
Reversed sc
Implicit renaming
Explicit renaming
SRFI 72
など…

 処理系によっては伝統的マクロも
Schemeのマクロ
 R^4RSではAppendixに

 R^5RSではR^4RSから低水準マクロの構文
を無くしたものが追加される
 R^6RSではsyntax-caseが登場
 ライブラリを導入
 そのため,フェーズという概念が必要に
syntax-rules
 R^5RSより追加

 高水準
 健全
 CのプリプロセッサやOcamlのCamlp4のよ

うに,それ自体が別の言語
マクロのCPS変換
 R^5RSのsyntax-rulesを使う際に,マクロ

内でマクロを呼ぶ場合,CPS変換が必要
 これはsyntax-rulesの定義によるもの
 syntax-rulesで書かれたマクロは,実質
的に名前呼び等に等価なため
 syntax-caseやsc等ではこれは必要ない
syntax-case
 R^6RSで追加

 ハイブリッド
 かなり複雑
 闇
syntactic closure
 R^nRSにはない

 低水準
 意図的に健全性を壊せる
 S式だけでなく,マクロ使用時の環境を受

け取る
reversed syntactic closure
 R^nRSにはない

 低水準
 意図的に健全性を壊せる
 scとは逆に,マクロ定義時の環境を受け

取る
explicit renaming
 R^nRSにはない

 低水準
 意図的に健全性を壊せる
 定義時の環境を,生で渡さず,それへの

APIを関数として渡す
 rename関数を用いて,定義時の環境で評
価するシンボルを指定
implicit renaming
 R^nRSにはない

 低水準
 意図的に健全性を壊せる
 erマクロとは逆に,inject関数によって,

展開時の環境で評価するシンボルを指定
SRFI 72
 マクロシステムとパターンマッチングを

分離
 詳しくは知らない
今後
 これらをまとめて,解説するつもり

 健全なマクロについての日本語の文献は
少ない
 さらに言えば,健全なマクロに関する研

究は少ない(?)
 しかし,開いてみれば面白そうな話がご
ろごろ
 他の言語のマクロシステムについても,
興味がある
質疑応答
ご清聴ありがとうございました

灘校パソコン研究部(NPCA)におけるLispの活用について