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

36
灘校パソコン研究部(NPCA)に おけるLISPの活用について 2013/11/21 中西 (灘高等学校2)

description

at Lispセミナー(2013/11/21)

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

灘校パソコン研究部(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

マクロシステムとパターンマッチングを分離

詳しくは知らない

今後

これらをまとめて,解説するつもり

健全なマクロについての日本語の文献は少ない

さらに言えば,健全なマクロに関する研究は少ない(?)

しかし,開いてみれば面白そうな話がごろごろ

他の言語のマクロシステムについても,興味がある

質疑応答

ご清聴ありがとうございました