Skip to Content
深入理解運算原理|從簡單的機器到無所不能的程式
book

深入理解運算原理|從簡單的機器到無所不能的程式

by Tom Stuart
November 2017
Beginner to intermediate
344 pages
7h 2m
Chinese
GoTop Information, Inc.
Content preview from 深入理解運算原理|從簡單的機器到無所不能的程式
無為的程式設計
|
179
述語
我們的下一件工作是將
Fixnum#zero?
替換成能以 proc 為基礎的數值一起運作的 proc
基礎的實作物。Ruby 值的
#zero?
底層演算法有點像這樣:
def zero?(n)
if n == 0
true
else
false
end
end
(雖然這比必要的更為冗長,但它卻很清楚發生了什麼事:將數值和
0
進行比較;如果
相等就傳回
true
;否則就傳回
false
我們要如何改寫這個才能處理 proc(而非 Ruby 數值)?再看一次我們的數值實作物:
ZERO = -> p { -> x { x } }
ONE = -> p { -> x { p[x] } }
TWO = -> p { -> x { p[p[x]] } }
THREE = -> p { -> x { p[p[p[x]]] } }
請注意,
ZERO
是唯一不呼叫
p
的數值(它只傳回
x
),而所有其他數值至少呼叫一次
p
我們可以利用這一點:如果我們以
TRUE
作為它第 2 個引數來呼叫未知的數值,如果數
值為零,它將立即傳回
TRUE
如果不是零,那麼它會傳回呼叫
p
的任何傳回值,所以如
果我們讓
p
是永遠傳回
FALSE
proc,就能如願得到我們想要的行為:
def zero?(proc)
proc[-> x { FALSE }][TRUE]
end
再次強調,將它重寫成 proc 真的很容易:
IS_ZERO = -> n { n[-> x { FALSE }][TRUE] }
我們可以在主控台使用 ...
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.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’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
QuotationMarkI 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
QuotationMarkI’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
QuotationMarkI'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.
Mark W.
Embedded Software Engineer

You might also like

JSON實務手冊

JSON實務手冊

Tom Marrs

Publisher Resources

ISBN: 9789864766000