Submit Search
Upload
Lisperはじめました
•
0 likes
•
1,232 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
Techtalk:多様体
Techtalk:多様体
Kenta Oono
グラフと木
グラフと木
京大 マイコンクラブ
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
Keiichiro Ono
Motpy ros rosjp
Motpy ros rosjp
RayAr3
クラスタリングとレコメンデーション資料
クラスタリングとレコメンデーション資料
洋資 堅田
スパースモデリングによる多次元信号・画像復元
スパースモデリングによる多次元信号・画像復元
Shogo Muramatsu
「カオス発振器(チュア回路)」の作り方
「カオス発振器(チュア回路)」の作り方
jojporg
PyMC mcmc
PyMC mcmc
Xiangze
Recommended
Techtalk:多様体
Techtalk:多様体
Kenta Oono
グラフと木
グラフと木
京大 マイコンクラブ
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
Keiichiro Ono
Motpy ros rosjp
Motpy ros rosjp
RayAr3
クラスタリングとレコメンデーション資料
クラスタリングとレコメンデーション資料
洋資 堅田
スパースモデリングによる多次元信号・画像復元
スパースモデリングによる多次元信号・画像復元
Shogo Muramatsu
「カオス発振器(チュア回路)」の作り方
「カオス発振器(チュア回路)」の作り方
jojporg
PyMC mcmc
PyMC mcmc
Xiangze
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
trmr
[DL輪読会]Attention Is All You Need
[DL輪読会]Attention Is All You Need
Deep Learning JP
充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
【FIT2016チュートリアル】ここから始める情報処理 ~音声編~ by 東工大・篠崎先生
【FIT2016チュートリアル】ここから始める情報処理 ~音声編~ by 東工大・篠崎先生
Toshihiko Yamasaki
行動圏推定の基礎知識2014.8
行動圏推定の基礎知識2014.8
Hiroaki Ishii
合同数問題と保型形式
合同数問題と保型形式
Junpei Tsuji
Chokudai search
Chokudai search
AtCoder Inc.
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
nitoyon
[DL輪読会]Understanding Black-box Predictions via Influence Functions
[DL輪読会]Understanding Black-box Predictions via Influence Functions
Deep Learning JP
RMQ クエリ処理
RMQ クエリ処理
HCPC: 北海道大学競技プログラミングサークル
HoloLens光学系の謎に迫る
HoloLens光学系の謎に迫る
AmadeusSVX
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
Ken Morishita
ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】
Yuki Arase
エンジニアと健康
エンジニアと健康
京大 マイコンクラブ
競プロは人生の役に立つ!
競プロは人生の役に立つ!
Kensuke Otsuki
蟻本輪講 データ構造
蟻本輪講 データ構造
HCPC: 北海道大学競技プログラミングサークル
この手に超高精度GPSを!
この手に超高精度GPSを!
KLab Inc. / Tech
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
roboard
自然言語処理勉強会11章 情報抽出と知識獲得
自然言語処理勉強会11章 情報抽出と知識獲得
Retrieva inc.
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
基晴 出井
Xamarin はじめました
Xamarin はじめました
Nobutada Matsubara
SKIコンビネーターによる処理系の作成
SKIコンビネーターによる処理系の作成
Nobutada Matsubara
More Related Content
What's hot
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
trmr
[DL輪読会]Attention Is All You Need
[DL輪読会]Attention Is All You Need
Deep Learning JP
充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
【FIT2016チュートリアル】ここから始める情報処理 ~音声編~ by 東工大・篠崎先生
【FIT2016チュートリアル】ここから始める情報処理 ~音声編~ by 東工大・篠崎先生
Toshihiko Yamasaki
行動圏推定の基礎知識2014.8
行動圏推定の基礎知識2014.8
Hiroaki Ishii
合同数問題と保型形式
合同数問題と保型形式
Junpei Tsuji
Chokudai search
Chokudai search
AtCoder Inc.
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
nitoyon
[DL輪読会]Understanding Black-box Predictions via Influence Functions
[DL輪読会]Understanding Black-box Predictions via Influence Functions
Deep Learning JP
RMQ クエリ処理
RMQ クエリ処理
HCPC: 北海道大学競技プログラミングサークル
HoloLens光学系の謎に迫る
HoloLens光学系の謎に迫る
AmadeusSVX
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
Ken Morishita
ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】
Yuki Arase
エンジニアと健康
エンジニアと健康
京大 マイコンクラブ
競プロは人生の役に立つ!
競プロは人生の役に立つ!
Kensuke Otsuki
蟻本輪講 データ構造
蟻本輪講 データ構造
HCPC: 北海道大学競技プログラミングサークル
この手に超高精度GPSを!
この手に超高精度GPSを!
KLab Inc. / Tech
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
roboard
自然言語処理勉強会11章 情報抽出と知識獲得
自然言語処理勉強会11章 情報抽出と知識獲得
Retrieva inc.
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
基晴 出井
What's hot
(20)
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
[DL輪読会]Attention Is All You Need
[DL輪読会]Attention Is All You Need
充足可能性問題のいろいろ
充足可能性問題のいろいろ
【FIT2016チュートリアル】ここから始める情報処理 ~音声編~ by 東工大・篠崎先生
【FIT2016チュートリアル】ここから始める情報処理 ~音声編~ by 東工大・篠崎先生
行動圏推定の基礎知識2014.8
行動圏推定の基礎知識2014.8
合同数問題と保型形式
合同数問題と保型形式
Chokudai search
Chokudai search
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
[DL輪読会]Understanding Black-box Predictions via Influence Functions
[DL輪読会]Understanding Black-box Predictions via Influence Functions
RMQ クエリ処理
RMQ クエリ処理
HoloLens光学系の謎に迫る
HoloLens光学系の謎に迫る
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
ゼロから始める自然言語処理 【FIT2016チュートリアル】
ゼロから始める自然言語処理 【FIT2016チュートリアル】
エンジニアと健康
エンジニアと健康
競プロは人生の役に立つ!
競プロは人生の役に立つ!
蟻本輪講 データ構造
蟻本輪講 データ構造
この手に超高精度GPSを!
この手に超高精度GPSを!
86Duino 小六足機器人 DIY 課程教材
86Duino 小六足機器人 DIY 課程教材
自然言語処理勉強会11章 情報抽出と知識獲得
自然言語処理勉強会11章 情報抽出と知識獲得
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
ベイズ推定でパラメータリスクを捉える&優れたサンプラーとしてのMCMC
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