=> -> m { -> n { n[-> n { -> p { -> x { p[n[p][x]] } } }][m] } }
この言語には最小限の構文しかないので、任意のラムダ計算プログラムを表現するのにこれら3つ
のクラスで十分です。
6.2.2
意味論
それぞれの構文クラスに
#reduce
メソッドを実装することによって、スモールステップ操作的意味
論を与えましょう。スモールステップ意味論を使うと良いことがあります。なぜなら、Rubyの式では
簡単にはできなかった、評価の各ステップを観察できるためです。
6.2.2.1
変数の置き換え
#reduce
を実装する前に、まず
#replace
という操作が必要になります。これは式の中に登場する
特別な変数を見つけて、別の式に置き換えるメソッドです。
class LCVariable
def replace(name, replacement)
if self.name == name
replacement
else
self
end
end
end
class LCFunction
def replace(name, ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.
O’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
I wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
I’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
I'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.