• 《Two Dozen Short Lessons in Haskell》(二十四)代数类型


    这是《Two Dozen Short Lessons in Haskell》这本书的最后一章,第23章没有习题。

    这一章里介绍了Haskell如果自定义一种类型,并且用一个双人博弈游戏为例子讲解了如何使用这些类型,里面简单介绍了Minimax算法。

    至此,这本书全部学完,当然还没用Haskell写过什么大一点的程序,只是掌握了其基本概念。

    1 A tree, in computer science, is an entity

    a with a root and two subtrees

    b with a root and a collection of subtrees, each of which is also a tree

    c with a collection of subtrees, each of which has one or more roots

    d described in a diagram with circles, lines, and random connections

    2 A sequence, in Haskell, is an entity

    a with one or more elements

    b that is empty or has a first element followed by a sequence of elements

    c whose elements are also sequences

    d with a head and one or more tails

    3 The following definition specifies

    HASKELL DEFINITION • data WeekDay =

    HASKELL DEFINITION • Monday | Tuesday | Wednesday | Thursday | Friday

    a a type with five constructors

    b a type with five explicit constructors and two implicit ones

    c a tree with five roots

    d a sequence with five elements

    4 Given the definition in the preceding question, what is the type of the following function f?

    HASKELL DEFINITION • f Tuesday = "Belgium"

    a f :: WeekDay –> String

    b f :: Tuesday -> "Belgium"

    c f :: Day –> Country

    d type of f cannot be determined

    5 Types defined in Haskell scripts with the data keyword

    a must begin with a capital letter

    b may be imported from modules

    c must be used consistently in formulas, just like intrinsic types

    d all of the above

    6 What kind of structure does the following type represent?

    HASKELL DEFINITION • data BinaryTree = Branch BinaryTree BinaryTree | Leaf String

    a a type with four constructors

    b a digital structure

    c a tree made up of ones and zeros

    d a tree in which each root has either two subtrees or none

    7 Given the preceding definition of the type BinaryTree, which of the following defines a function that computes

    the total number of Branch constructors in an entity of type BinaryTree?

    a branches binaryTree = 2

    b branches (Branch left right) = 2

    branches (Leaf x) = 0

    c branches (Branch left right) = 1 + branches left + branches right

    branches (Leaf x) = 0

    d branches (Branch left right) = 2*branches left + 2*branches right

    branches (Leaf x) = 1

    8 The formula xs!!(length xs - 1)

    a is recursive

    b has the same type as xs

    c delivers the same result as last xs

    d none of the above

    9 Given the definition of the function pam in the module SequenceUtilities, the formula

    pam (map (+) [1 . . 5]) 10

    a delivers the same result as map (1+) [1 . . 5]

    b delivers the same result as pam [1 .. 5] (map (1+))

    c delivers the result [11, 12, 13, 14, 15]

    d all of the above

    10 Given the Grid [1,3,0, 0,0,0, 0,0,2] (as in the tic-tac-toe script), what is the status of the game?

    a game over, X wins

    b game over, O wins

    c O’s turn to play

    d X’s turn to play

    11 Which of the following formulas extracts the diagonal of a grid (as in the tic-tac-toe program)?

    a (take 3 . map head . iterate(drop 4)) grid

    b [head grid, head(drop 4 grid), head(drop 8 grid)]

    c [head grid, grid!!4, last(grid)]

    d all of the above

    ======

    答案

    ======

     

    1 b

    数据结构中“树”的定义,一个根及多个子树

    2 b

    列表有可能是空的

    3 a

    data可以来自定义一种类型(也就是面向对象语言中的类),这里有五个构造器constructor。只是这里的构造器都没有带参数。

    4 a

    这个简单,定义好的类型可以像内置的Haskell类型一样来用。

    5 d

    类型名称必须是大写字母开头的;可以导入模块中;可以像内置的类型一样用。

    6 d

    就是二叉树的定义

    7 c

    求二叉树的分支总数。叶子节点分支为0,否则为左子树的分支数+右子树的分支数。

    8 c

    !!用来取出一个列表中指定位置上的元素。这里就是取最后一个元素,与last函数一样。

    9 c?

    还没搞明白pam的意思。

    10 c

    先走画X,后走的画O。该O方走棋。

    130   XX.

    000   …

    002   ..O

    11 b?

    答案是b,我认为是d。感觉这些表示方法都正确,答案a中的函数写得相当牛X,不知道为什么不正确?

  • 相关阅读:
    idea打包jar的多种方式,用IDEA自带的打包形式,用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包,用Maven插件maven-assembly-plugin打包
    SSH Secure Shell 无法登录:server responded "algorithm negotiation failed”
    redis.clients.jedis.HostAndPort
    spring boot jar 进程自动停止,自动终止,不能后台持续运行
    剑指Offer_46_孩子们的游戏(圆圈中最后剩下的数)
    剑指Offer_45_扑克牌顺子
    剑指Offer_44_翻转单词顺序列
    剑指Offer_43_左旋转字符串
    剑指Offer_42_和为S的两个数字
    剑指Offer_41_和为S的连续正数序列
  • 原文地址:https://www.cnblogs.com/speeding/p/3302530.html
Copyright © 2020-2023  润新知