《Two Dozen Short Lessons in Haskell》学习(十)- Private Definitions — the where-clause
《Two Dozen Short Lessons in Haskell》(Copyright ? 1995, 1996, 1997 by Rex Page,有人翻譯為Haskell二十四學時教程,該書如果不用于贏利,可以任意發布,但需要保留他們的copyright)這本書是學習 Haskell的一套練習冊,共有2本,一本是問題,一本是答案,分為24個章節。在這個站點有PDF文件。幾年前剛開始學習Haskell的時候,感覺前幾章還可以看下去,后面的內容越來越難以理解。現在對函數式編程有了一些了解后,再來看這些題,許多內容變得簡單起來了。
初學Haskell之前一定要記住:
把你以前學習面向過程的常規的編程語言,如Pascal、C、Fortran等等統統忘在腦后,函數式編程完全是不一樣的編程模型,用以前的術語和思維來理解函數式編程里的概念,只會讓你困惑和迷茫,會嚴重地影響你的學習進度。
這個學習材料內容太多,想把整書全面翻譯下來非常困難,只有通過練習題將一些知識點串起來,詳細學習Haskell還是先看其它一些入門書籍吧,這本書配套著學學還是不錯的。
第十章 私有定義----where從句
Haskell中的許多名字也稱為變量,像是數學方程中的變量variable一樣。但與過程式編程完全不同,在函數式編程里這個量,當它定義了之后,實際并不改變。
where從句把數學中的局部定義的概念直接用在編程語言中了。
在SQL查詢語句中where只是一個條件表達式,與haskell是不一樣的。
?
1 Integral numbers are denoted in Haskell by
a decimal numerals enclosed in quotation marks
b decimal numerals — no quotation marks involved
c decimal numerals with or without quotation marks
d values of type String
?
2 The Haskell system, when interpreting scripts, represents numbers as
a decimal numerals
b binary numerals
c hexadecimal numerals
d however it likes — none of your business anyway
?
3 Encapsulation
a prevents name clashes
b prevents one software component from messing with the internal details of another
c is one of the most important concepts in software engineering
d all of the above
?
4 A where-clause in Haskell defines variables that
a will be accessible from all where-clauses
b take the name of the where-clause as a prefix
c cannot be accessed outside the definition containing the clause
d have strange names
?
5 In Haskell, the beginning and end of a definition is determined by
a begin and end statements
b matched sets of curly braces { }
c indentation
d however it likes — none of your business anyway
?
6 The intrinsic function foldr
a is more generally applicable than foldr1
b takes more arguments than foldr1
c can accommodate an empty sequence as its last argument
d all of the above
?
7 What value does the following command deliver?
HASKELL DEFINITION ? ct xs= foldr addOne 0 xs
HASKELL DEFINITION ????? where
HASKELL DEFINITION ????? addOne x sum = 1 + sum
HASKELL COMMAND ? ct [1, 2, 3, 4]
a 10, by computing 1+(2+(3+(4+0)))
b 4, by computing 1+(1+(1+(1+0)))
c 5, by computing 1+(1+(1+(1+1)))
d nothing — ct is not properly defined
?
=========================================================
答
案
在
下
面
=========================================================
1 b
5678是整數,而"5678”就是字符串,在各種編程語言都是這樣。
?
2 d
Haskell內部如何表達整數,是haskell編譯器或解釋器的內部機制,不用關心,也沒有指出過,。
?
3 d
封裝可以防止名字沖突,在軟件工程中常用的一個概念,可以防止與其它模塊中的變量相混。
?
4 c
在where從句里的變量,當然通常是存在于一個函數定義內的,在這個函數定義內是可見的,但在其它地方都不可訪問。
?
5 c
Haskell中的縮進是有含義的,當縮進時,表示前面的定義還沒完。
當縮進回到了前面一個級別,則表示當前的定義結束了,開始一個新的定義。
?
6 d
foldr1函數有2個參數,而foldr有3個參數。
例如:foldr1 op [w,x,y] = w 'op' (x 'op' y)
對應于foldr op z [w,x,y] = w 'op' (x 'op' (y 'op' z))
并且foldr op z [] = []
foldr函數可以保證在空列表情況時,也可以得到返回值。而foldr1在給空列表時,出報錯。
例如: foldr1 (+) []
報錯:Exception: Prelude.foldr1: empty list
而foldr (+) 0 []會得到0
?
7 b
這個函數相當于統計元素的個數
?
?
《Two Dozen Short Lessons in Haskell》學習(一)Hello World
《Two Dozen Short Lessons in Haskell》學習(二)Definitions
《Two Dozen Short Lessons in Haskell》學習(三)How to Run Haskell Programs
《Two Dozen Short Lessons in Haskell》學習(四)List Comprehensions
《Two Dozen Short Lessons in Haskell》學習(五)Function Composition and Currying
《Two Dozen Short Lessons in Haskell》學習(六)Patterns of Computation – Composition, Folding, and Mapping
《Two Dozen Short Lessons in Haskell》學習(七)- Types
《Two Dozen Short Lessons in Haskell》學習(八)- Function Types, Classes, and Polymorphism
《Two Dozen Short Lessons in Haskell》學習(九)- Types of Curried Forms and Higher Order Functions
《Two Dozen Short Lessons in Haskell》學習(十)- Private Definitions — the where-clause
《Two Dozen Short Lessons in Haskell》學習(十一)- Tuples
《Two Dozen Short Lessons in Haskell》學習(十二) 數值相關的類
《Two Dozen Short Lessons in Haskell》學習(十三)迭代及重復的常規模式
《Two Dozen Short Lessons in Haskell》學習(十四)截斷序列和惰性求值
《Two Dozen Short Lessons in Haskell》學習(十五)- Encapsulation — modules
《Two Dozen Short Lessons in Haskell》學習(十六)- Definitions with Alternatives
《Two Dozen Short Lessons in Haskell》學習(十七) - 模塊庫
《Two Dozen Short Lessons in Haskell》學習(十八) - 交互式鍵盤輸入和屏幕輸出
《Two Dozen Short Lessons in Haskell》學習(十九) - 文件輸入與輸出
《Two Dozen Short Lessons in Haskell》學習(二十)- 分數
《Two Dozen Short Lessons in Haskell》學習(二十一)- 在形式參數中使用模式匹配
《Two Dozen Short Lessons in Haskell》學習(二十二)- 遞歸
第23章沒有習題。
《Two Dozen Short Lessons in Haskell》(二十四)代數類型
轉載于:https://www.cnblogs.com/speeding/archive/2012/12/08/2807844.html
總結
以上是生活随笔為你收集整理的《Two Dozen Short Lessons in Haskell》学习(十)- Private Definitions — the where-clause的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据与伦理
- 下一篇: COM 组件设计与应用(十一)