Submit Search
Upload
Lisperはじめました
•
0 likes
•
1,228 views
Nobutada Matsubara
Follow
IGGG Meetup 2015 Spring で発表したスライド 自作したLisp処理系でストリームデータ構造を実装した
Read less
Read more
Software
Report
Share
Report
Share
1 of 21
Download now
Download to read offline
Recommended
Transformerを用いたAutoEncoderの設計と実験
Transformerを用いたAutoEncoderの設計と実験
myxymyxomatosis
ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望
maruyama097
safe and efficient off policy reinforcement learning
safe and efficient off policy reinforcement learning
Ryo Iwaki
人工知能概論 1
人工知能概論 1
Tadahiro Taniguchi
卒論発表
卒論発表
KajiwaraYoshiki
イラストで学ぶ人工知能概論 9
イラストで学ぶ人工知能概論 9
Tadahiro Taniguchi
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII
Rosbag search system
Rosbag search system
yusuke shibui
Recommended
Transformerを用いたAutoEncoderの設計と実験
Transformerを用いたAutoEncoderの設計と実験
myxymyxomatosis
ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望
maruyama097
safe and efficient off policy reinforcement learning
safe and efficient off policy reinforcement learning
Ryo Iwaki
人工知能概論 1
人工知能概論 1
Tadahiro Taniguchi
卒論発表
卒論発表
KajiwaraYoshiki
イラストで学ぶ人工知能概論 9
イラストで学ぶ人工知能概論 9
Tadahiro Taniguchi
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII
Rosbag search system
Rosbag search system
yusuke shibui
[DL輪読会]Object-Centric Learning with Slot Attention
[DL輪読会]Object-Centric Learning with Slot Attention
Deep Learning JP
モデル最適化指標・評価指標の選び方
モデル最適化指標・評価指標の選び方
幹雄 小川
卒論発表スライド
卒論発表スライド
Yoshiki Iida
Apple Watchを使い倒す 〜Watchから取れるデータとその活用法〜
Apple Watchを使い倒す 〜Watchから取れるデータとその活用法〜
Atsushi Otsubo
電子工作のための電子回路基礎ー後編
電子工作のための電子回路基礎ー後編
fumi_maker
人工知能概論 7
人工知能概論 7
Tadahiro Taniguchi
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Preferred Networks
トップカンファレンスへの論文採択に向けて(AI研究分野版)/ Toward paper acceptance at top conferences (AI...
トップカンファレンスへの論文採択に向けて(AI研究分野版)/ Toward paper acceptance at top conferences (AI...
JunSuzuki21
研究法(Claimとは)
研究法(Claimとは)
Jun Rekimoto
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
AtCoder Inc.
SSII2022 [OS3-02] Federated Learningの基礎と応用
SSII2022 [OS3-02] Federated Learningの基礎と応用
SSII
PredCNN: Predictive Learning with Cascade Convolutions
PredCNN: Predictive Learning with Cascade Convolutions
harmonylab
[DL輪読会]"Dynamical Isometry and a Mean Field Theory of CNNs: How to Train 10,0...
[DL輪読会]"Dynamical Isometry and a Mean Field Theory of CNNs: How to Train 10,0...
Deep Learning JP
【DL輪読会】SDEdit: Guided Image Synthesis and Editing with Stochastic Differentia...
【DL輪読会】SDEdit: Guided Image Synthesis and Editing with Stochastic Differentia...
Deep Learning JP
[Track4-3] AI・ディープラーニングを駆使して、「G検定合格者アンケートのフリーコメント欄」を分析してみた
[Track4-3] AI・ディープラーニングを駆使して、「G検定合格者アンケートのフリーコメント欄」を分析してみた
Deep Learning Lab(ディープラーニング・ラボ)
卒論
卒論
Hidetoshi Akiyama
[Tutorial] Sentence Representation
[Tutorial] Sentence Representation
Hiroki Shimanaka
ご注文はSTM32の開発ですか?
ご注文はSTM32の開発ですか?
大工大エンジュニア
#FTMA15 第二回課題 鬼コースサーベイ
#FTMA15 第二回課題 鬼コースサーベイ
Yoichi Ochiai
Deep sets
Deep sets
Tomohiro Takahashi
Xamarin はじめました
Xamarin はじめました
Nobutada Matsubara
SKIコンビネーターによる処理系の作成
SKIコンビネーターによる処理系の作成
Nobutada Matsubara
More Related Content
What's hot
[DL輪読会]Object-Centric Learning with Slot Attention
[DL輪読会]Object-Centric Learning with Slot Attention
Deep Learning JP
モデル最適化指標・評価指標の選び方
モデル最適化指標・評価指標の選び方
幹雄 小川
卒論発表スライド
卒論発表スライド
Yoshiki Iida
Apple Watchを使い倒す 〜Watchから取れるデータとその活用法〜
Apple Watchを使い倒す 〜Watchから取れるデータとその活用法〜
Atsushi Otsubo
電子工作のための電子回路基礎ー後編
電子工作のための電子回路基礎ー後編
fumi_maker
人工知能概論 7
人工知能概論 7
Tadahiro Taniguchi
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Preferred Networks
トップカンファレンスへの論文採択に向けて(AI研究分野版)/ Toward paper acceptance at top conferences (AI...
トップカンファレンスへの論文採択に向けて(AI研究分野版)/ Toward paper acceptance at top conferences (AI...
JunSuzuki21
研究法(Claimとは)
研究法(Claimとは)
Jun Rekimoto
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
AtCoder Inc.
SSII2022 [OS3-02] Federated Learningの基礎と応用
SSII2022 [OS3-02] Federated Learningの基礎と応用
SSII
PredCNN: Predictive Learning with Cascade Convolutions
PredCNN: Predictive Learning with Cascade Convolutions
harmonylab
[DL輪読会]"Dynamical Isometry and a Mean Field Theory of CNNs: How to Train 10,0...
[DL輪読会]"Dynamical Isometry and a Mean Field Theory of CNNs: How to Train 10,0...
Deep Learning JP
【DL輪読会】SDEdit: Guided Image Synthesis and Editing with Stochastic Differentia...
【DL輪読会】SDEdit: Guided Image Synthesis and Editing with Stochastic Differentia...
Deep Learning JP
[Track4-3] AI・ディープラーニングを駆使して、「G検定合格者アンケートのフリーコメント欄」を分析してみた
[Track4-3] AI・ディープラーニングを駆使して、「G検定合格者アンケートのフリーコメント欄」を分析してみた
Deep Learning Lab(ディープラーニング・ラボ)
卒論
卒論
Hidetoshi Akiyama
[Tutorial] Sentence Representation
[Tutorial] Sentence Representation
Hiroki Shimanaka
ご注文はSTM32の開発ですか?
ご注文はSTM32の開発ですか?
大工大エンジュニア
#FTMA15 第二回課題 鬼コースサーベイ
#FTMA15 第二回課題 鬼コースサーベイ
Yoichi Ochiai
Deep sets
Deep sets
Tomohiro Takahashi
What's hot
(20)
[DL輪読会]Object-Centric Learning with Slot Attention
[DL輪読会]Object-Centric Learning with Slot Attention
モデル最適化指標・評価指標の選び方
モデル最適化指標・評価指標の選び方
卒論発表スライド
卒論発表スライド
Apple Watchを使い倒す 〜Watchから取れるデータとその活用法〜
Apple Watchを使い倒す 〜Watchから取れるデータとその活用法〜
電子工作のための電子回路基礎ー後編
電子工作のための電子回路基礎ー後編
人工知能概論 7
人工知能概論 7
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
トップカンファレンスへの論文採択に向けて(AI研究分野版)/ Toward paper acceptance at top conferences (AI...
トップカンファレンスへの論文採択に向けて(AI研究分野版)/ Toward paper acceptance at top conferences (AI...
研究法(Claimとは)
研究法(Claimとは)
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
SSII2022 [OS3-02] Federated Learningの基礎と応用
SSII2022 [OS3-02] Federated Learningの基礎と応用
PredCNN: Predictive Learning with Cascade Convolutions
PredCNN: Predictive Learning with Cascade Convolutions
[DL輪読会]"Dynamical Isometry and a Mean Field Theory of CNNs: How to Train 10,0...
[DL輪読会]"Dynamical Isometry and a Mean Field Theory of CNNs: How to Train 10,0...
【DL輪読会】SDEdit: Guided Image Synthesis and Editing with Stochastic Differentia...
【DL輪読会】SDEdit: Guided Image Synthesis and Editing with Stochastic Differentia...
[Track4-3] AI・ディープラーニングを駆使して、「G検定合格者アンケートのフリーコメント欄」を分析してみた
[Track4-3] AI・ディープラーニングを駆使して、「G検定合格者アンケートのフリーコメント欄」を分析してみた
卒論
卒論
[Tutorial] Sentence Representation
[Tutorial] Sentence Representation
ご注文はSTM32の開発ですか?
ご注文はSTM32の開発ですか?
#FTMA15 第二回課題 鬼コースサーベイ
#FTMA15 第二回課題 鬼コースサーベイ
Deep sets
Deep sets
Viewers also liked
Xamarin はじめました
Xamarin はじめました
Nobutada Matsubara
SKIコンビネーターによる処理系の作成
SKIコンビネーターによる処理系の作成
Nobutada Matsubara
入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !
Nobutada Matsubara
こんなに簡単、クラッキング!
こんなに簡単、クラッキング!
歩 奥山
「シン・テストエンジニアのキャリアについて: Q裏 甘口」 wacate_2016_winter
「シン・テストエンジニアのキャリアについて: Q裏 甘口」 wacate_2016_winter
久仁朗 山本(旧姓 村上)
ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?
Yuya Rin
STAC 2015 自動家は見た~自動化の現場の真実~ SIDE:マネージャ
STAC 2015 自動家は見た~自動化の現場の真実~ SIDE:マネージャ
Noriyuki Mizuno
「自動家は見た! 〜自動化の現場の真実〜」-システムテスト自動化カンファレンス2015「.reviewrc(おいしが)」発表枠 #stac2015
「自動家は見た! 〜自動化の現場の真実〜」-システムテスト自動化カンファレンス2015「.reviewrc(おいしが)」発表枠 #stac2015
Kazuhito Miura
本当は楽しいインターネット
本当は楽しいインターネット
Yuya Rin
テストは料理だ!テストのレシピを見てみよう #wacate
テストは料理だ!テストのレシピを見てみよう #wacate
Kazuhiro Takehana
Viewers also liked
(10)
Xamarin はじめました
Xamarin はじめました
SKIコンビネーターによる処理系の作成
SKIコンビネーターによる処理系の作成
入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !
こんなに簡単、クラッキング!
こんなに簡単、クラッキング!
「シン・テストエンジニアのキャリアについて: Q裏 甘口」 wacate_2016_winter
「シン・テストエンジニアのキャリアについて: Q裏 甘口」 wacate_2016_winter
ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?
STAC 2015 自動家は見た~自動化の現場の真実~ SIDE:マネージャ
STAC 2015 自動家は見た~自動化の現場の真実~ SIDE:マネージャ
「自動家は見た! 〜自動化の現場の真実〜」-システムテスト自動化カンファレンス2015「.reviewrc(おいしが)」発表枠 #stac2015
「自動家は見た! 〜自動化の現場の真実〜」-システムテスト自動化カンファレンス2015「.reviewrc(おいしが)」発表枠 #stac2015
本当は楽しいインターネット
本当は楽しいインターネット
テストは料理だ!テストのレシピを見てみよう #wacate
テストは料理だ!テストのレシピを見てみよう #wacate
Similar to Lisperはじめました
Lisper はじめました (再)
Lisper はじめました (再)
Nobutada Matsubara
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
たのしい関数型
たのしい関数型
Shinichi Kozake
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Ransui Iso
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
m2ym
(call/cc (lambda (cont) (cont 知見)))
(call/cc (lambda (cont) (cont 知見)))
Susisu
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
Taketo Sano
続・SECDマシン
続・SECDマシン
t-sin
「Lispインタープリター」勉強会 2014.12.04
「Lispインタープリター」勉強会 2014.12.04
Minoru Chikamune
Lisp study
Lisp study
Taichi Kimura
おいしいLisp
おいしいLisp
Kent Ohashi
言語処理系入門4
言語処理系入門4
Kenta Hattori
SwiftでRiemann球面を扱う
SwiftでRiemann球面を扱う
hayato iida
Proof summit2014mizar
Proof summit2014mizar
Alcor80UMa
EusLispでロボットプログラミング
EusLispでロボットプログラミング
Hiroaki Yaguchi
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
t-sin
HPC Phys-20201203
HPC Phys-20201203
MITSUNARI Shigeo
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
Similar to Lisperはじめました
(20)
Lisper はじめました (再)
Lisper はじめました (再)
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
たのしい関数型
たのしい関数型
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
(call/cc (lambda (cont) (cont 知見)))
(call/cc (lambda (cont) (cont 知見)))
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
続・SECDマシン
続・SECDマシン
「Lispインタープリター」勉強会 2014.12.04
「Lispインタープリター」勉強会 2014.12.04
Lisp study
Lisp study
おいしいLisp
おいしいLisp
言語処理系入門4
言語処理系入門4
SwiftでRiemann球面を扱う
SwiftでRiemann球面を扱う
Proof summit2014mizar
Proof summit2014mizar
EusLispでロボットプログラミング
EusLispでロボットプログラミング
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
HPC Phys-20201203
HPC Phys-20201203
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
More from Nobutada Matsubara
Haskell で作る競技型イベントの裏側
Haskell で作る競技型イベントの裏側
Nobutada Matsubara
Marp Next Theme: Colors
Marp Next Theme: Colors
Nobutada Matsubara
Marp Next Tips !
Marp Next Tips !
Nobutada Matsubara
Haskell で CLI
Haskell で CLI
Nobutada Matsubara
貧者のための「cron」
貧者のための「cron」
Nobutada Matsubara
Build Dockferile with Haskell
Build Dockferile with Haskell
Nobutada Matsubara
Elixir Programming with Type checking
Elixir Programming with Type checking
Nobutada Matsubara
MixML 作ってみる
MixML 作ってみる
Nobutada Matsubara
Elm でなんかつくる
Elm でなんかつくる
Nobutada Matsubara
Haskell と Elm と JSON の話
Haskell と Elm と JSON の話
Nobutada Matsubara
ADVENTAR の Bot を作る with Haskell
ADVENTAR の Bot を作る with Haskell
Nobutada Matsubara
Haskell Backpack 事始め
Haskell Backpack 事始め
Nobutada Matsubara
GitHub での Haskell の色が変わったんで
GitHub での Haskell の色が変わったんで
Nobutada Matsubara
日記って続かないよね...
日記って続かないよね...
Nobutada Matsubara
「7つの言語、7つの世界」を読む
「7つの言語、7つの世界」を読む
Nobutada Matsubara
Haskell で LINE Bot を作ってみた
Haskell で LINE Bot を作ってみた
Nobutada Matsubara
Marp colors
Marp colors
Nobutada Matsubara
Marp Tips
Marp Tips
Nobutada Matsubara
Whitespcae 入門
Whitespcae 入門
Nobutada Matsubara
Ruby4Ctf
Ruby4Ctf
Nobutada Matsubara
More from Nobutada Matsubara
(20)
Haskell で作る競技型イベントの裏側
Haskell で作る競技型イベントの裏側
Marp Next Theme: Colors
Marp Next Theme: Colors
Marp Next Tips !
Marp Next Tips !
Haskell で CLI
Haskell で CLI
貧者のための「cron」
貧者のための「cron」
Build Dockferile with Haskell
Build Dockferile with Haskell
Elixir Programming with Type checking
Elixir Programming with Type checking
MixML 作ってみる
MixML 作ってみる
Elm でなんかつくる
Elm でなんかつくる
Haskell と Elm と JSON の話
Haskell と Elm と JSON の話
ADVENTAR の Bot を作る with Haskell
ADVENTAR の Bot を作る with Haskell
Haskell Backpack 事始め
Haskell Backpack 事始め
GitHub での Haskell の色が変わったんで
GitHub での Haskell の色が変わったんで
日記って続かないよね...
日記って続かないよね...
「7つの言語、7つの世界」を読む
「7つの言語、7つの世界」を読む
Haskell で LINE Bot を作ってみた
Haskell で LINE Bot を作ってみた
Marp colors
Marp colors
Marp Tips
Marp Tips
Whitespcae 入門
Whitespcae 入門
Ruby4Ctf
Ruby4Ctf
Lisperはじめました
1.
Lisper はじめました Lisp によるストリームの実装 ひげ May
3, 2015 ひげ Lisper はじめました May 3, 2015 1 / 21
2.
自己紹介 ひげ:群大 J 科の優等生 趣味:勉強(数学,物理,科学,哲学),IT
系は言語系が好き 最近は... ゼミ → Haskell 演習 → C# SSH → Java ロボコン → C++ 趣味 → Ruby で今回は Lisp と D の話 ひげ Lisper はじめました May 3, 2015 2 / 21
3.
前回までのあらすじ 前回の IGGG Meetup
で「Lisper はじめました(大嘘)」を発表した ひげ Lisper はじめました May 3, 2015 3 / 21
4.
前回までのあらすじ 1 関数型言語の勉強がしたい! 2 処理系を実装して関数型言語の機能を加えれば勉強になる! 3 Pure Lisp ってのが
1 番簡単らしい! D 言語でPure Lisp の処理系を実装した ひげ Lisper はじめました May 3, 2015 4 / 21
5.
前回までのあらすじ Tour of Lisp 1958
年に設計された 2 番目に古い高級プログラミング言語 LISt Processing の略称 括弧によるシンプル(すぎる)なネスト構造で記述 手続きと引数はポーランド記法 数学を背景に持つ特殊な言語 ; n ま で の 総 和 を 求 め る 関 数 (define (sum n) (if (eq n 0) 0 (+ (sum (- n 1)) 1))) ひげ Lisper はじめました May 3, 2015 5 / 21
6.
前回までのあらすじ Tour of Lisp John
McCarthy は論文で式を評価するための最小の Lisp を示した それを「Pure Lisp」という Atom と List の 2 種類のデータ構造を持つ atom, eq, cons, car, cdr の 5 つの基本関数を持つ cond, define, lambda, quote の 4 つの特殊形式を持つ ひげ Lisper はじめました May 3, 2015 6 / 21
7.
前回までのあらすじ Tour of D (マイナーな)C/C++の後継を目標とした言語 強い静的型付 Java
や C とよく似た構文 型推論やガベージコレクションもある 仕様変更が激しかった(今はそうでもないらしい) Facebook が利用している(らしい) /* Hello World! */ import std.stdio; void main() { write("Hello World!"); } ひげ Lisper はじめました May 3, 2015 7 / 21
8.
前回までのあらすじ 今回はココから(やっと Lisp のコードを書きます) 1 関数型言語の勉強がしたい! 2 処理系を実装して関数型言語の機能を加えれば勉強になる! 3 Pure
Lisp ってのが 1 番簡単らしい! D 言語でPure Lisp の処理系を実装した ひげ Lisper はじめました May 3, 2015 8 / 21
9.
関数型プログラミング言語 関数型プログラミング言語は関数型プログラミングをサポートする言語 関数型プログラミング プログラム(問題)を「関数」として記述するプログラミングのコト そのため関数型言語には ラムダ式 遅延評価 高階関数 代数データ型 等の関数の表現力を増すための機能が実装されている そして今回実装するのは遅延評価 ひげ Lisper はじめました
May 3, 2015 9 / 21
10.
遅延評価 関数の評価戦略の 1 つ 関数の評価戦略 関数の引数の評価をいつ行うかというもの 大きく分けて
2 つ 先行評価:引数を評価してから関数に適用する 遅延評価:関数内で必要になってから引数を評価する 遅延評価を実装するには以下の 2 つの手続きが必要 評価を遅延させる手続き(delay) 遅延させた評価を強制させる手続き(force) ひげ Lisper はじめました May 3, 2015 10 / 21
11.
遅延評価 ストリーム 遅延評価の効果を試すためにストリームデータ構造を実装する ストリーム データの並びを表現したデータ構造 遅延評価を導入することによって「無限個の並び」を表現できる Lisp の場合:cdr の評価を取り出す時まで遅延させる ひげ
Lisper はじめました May 3, 2015 11 / 21
12.
実装 遅延評価の実装 2 つの手続きは以下のように書けばよい ; delay(syntax
suger) (lambda () <exp>) ; force (define (force delayed-object) (delayed-object)) しかし、遅延評価を実装するために 式を定義したときの環境を保持しておく必要がある 環境 どのような変数があって、どのような値であるかの変数の集合 要するに静的な環境を持つ式クラスを定義しないといけない 実は、これをクロージャ(Closure)と言った ひげ Lisper はじめました May 3, 2015 12 / 21
13.
実装 遅延評価の実装 クロージャの D コード class
Closure : List { private: // Bind variables Env add_binding(Exp vars, Exp vals, Env env); public: this(Exp exp, Env env) { super(exp, env); } override Exp apply(Exp actuals) { Exp exp = super.exp1; Env env = new Env(super.exp2.car, super.exp2.cdr); return exp.cdr.car.eval(add_binding(exp.car, actuals, env)); } override void print(); } ひげ Lisper はじめました May 3, 2015 13 / 21
14.
ストリーム ストリームの実装 ストリームは自作した処理系の上でライブラリとして実装 ;(define (delay exp)
(lambda () exp)) (define (force delayed-object) (delayed-object)) ;(define (cons-stream a b) (cons a (lambda () b))) (define (stream-car stream) (car stream)) (define (stream-cdr stream) (force (cdr stream))) (define the-empty-stream (quote ())) (define (stream-null s) (null? s)) (define (stream-ref stream n) (cond ((eq? n 0) (stream-car stream)) (#t (stream-ref (stream-cdr stream) (- n 1))))) (define (stream-map proc s) (cond ((stream-null s) the-empty-stream) (#t (cons (proc (stream-car s)) (lambda () (stream-map proc (stream-cdr s))))))) ひげ Lisper はじめました May 3, 2015 14 / 21
15.
ネイピア数を求める 方法は 2 つ 無限級数を無限ストリームで模倣 ネイピア数を無限ストリームで模倣 ひげ
Lisper はじめました May 3, 2015 15 / 21
16.
ネイピア数を求める 無限級数の模倣 ネイピア数の無限級数 e = [ ∞ ∑ k=0 (−1)k k! ]−1 さらに Euler
Transform で収束を加速 Euler Transform Sn+1 − (Sn+1 −Sn)2 Sn−1 −2Sn +Sn+1 ひげ Lisper はじめました May 3, 2015 16 / 21
17.
ネイピア数を求める 無限級数の模倣 ; e: (/
(stream-ref e-stream n)) (define (e-proc n) (cond ((< n 0) (- (/ 1.0 (product (- n))))) (#t (/ 1.0 (product n))))) (define (e-summands n) (cons (e-proc n) (lambda () (stream-map - (e-summands (+ n 1)))))) (define e-stream (partial-sums (e-summands 0))) ; Euler Transform: (stream-ref (euler-transform pi-stream) n) (define (euler-transform s) ((lambda (s0 s1 s2) (cons (- s2 (/ (* (- s2 s1) (- s2 s1)) (+ s0 (* -2 s1) s2))) (lambda () (euler-transform (stream-cdr s))))) (stream-ref s 0) (stream-ref s 1) (stream-ref s 2))) ひげ Lisper はじめました May 3, 2015 17 / 21
18.
ネイピア数を求める ネイピア数の模倣 e の無限級数 e = ∞ ∑ k=0 1 k! =
1+1+ 1 2! + 1 3! +··· e の小数点第 1 位は次式の整数部分 10(e−2) = 10 2! + 10 3! + 10 4! ··· 整数部分を求めるために各項 10/k! の分子が k 未満になるように変形 10(e−2) = 10 2! +···+ 10 8! + 10+1 9! + 0 10! + 10 11! +··· = 10 2! +···+ 10+1 8! + 2 9! + 0 10! + 10 11! +··· = 7+ 0 2! + 1 3! + 0 4! + 1 5! + 5 6! + 4 7! + 3 8! + 2 9! + 0 10! +··· ひげ Lisper はじめました May 3, 2015 18 / 21
19.
ネイピア数を求める ネイピア数の模倣 ; napier: (stream-ref
napier n) (define ones (cons 1 (lambda () ones))) (define nomalize (lambda (n stream) ((lambda (head right) ((lambda (carry) (cons carry (lambda () (cons (mod (+ head (stream-car (force right))) n) (lambda () (stream-cdr (force right))))))) (cond ((< (+ (mod head n) 9) n) (div head n)) (true (div (+ head (stream-car (force right))) n))))) (stream-car stream) (lambda () (nomalize (+ n 1) (stream-cdr stream)))))) (define convert (lambda (x) (cons (stream-car x) (lambda () (convert (nomalize 2 (scale-stream (stream-cdr x) 10))))))) (define napier (convert (cons 2 (lambda () ones)))) ひげ Lisper はじめました May 3, 2015 19 / 21
20.
今後の展望 実は諸事情で C# に移植してる C#
の方に高階関数を入れるつもり 後は処理速度を少し考えたいので環境周りを何とかしたい ひげ Lisper はじめました May 3, 2015 20 / 21
21.
参考文献 Harold Abelson,Gerald Jay
Sussman,Julie Sussman,『計算機プログ ラムの構造と解釈 第 2 版』(和田栄一訳),株式会社翔泳社,2014 年 John McCarthy,『LISP 1.5 Programmers Manual』,The MIT Press, 1962 「M.Hiroi’s Home Page - お気楽 Scheme プログラミング入門 Scheme で作る micro Scheme」, http://www.geocities.jp/m_hiroi/func/abcscm30.html, (2015/2/25 アクセス) ひげ Lisper はじめました May 3, 2015 21 / 21
Download now