【问题标题】:CIS 194 exercise confusionCIS 194 练习混淆
【发布时间】:2016-08-05 22:59:56
【问题描述】:

我正在自学 Haskell,但被 CIS 194 中 homework 的练习弄糊涂了:

练习 1. 在开始计算表达式和语句之前,我们需要一些方法来存储和查找变量的状态。我们将 State 定义为 String -> Int 类型的函数。这使得查找变量的值变得非常容易;查找的值 状态中的“A”,我们简称为状态“A”。每当我们分配一个变量时,我们都想更新程序状态。实现以下功能: 扩展 :: State -> String -> Int -> State

提示:您可以将输入状态用作其他变量的黑盒 比你分配的那个。

示例: 让 st' = 扩展 st "A" 5 在 st' "A" == 5

我基本上不明白它的要求和示例。这如何提供一种查找“A”值的方法?由于State 被定义为type State = String -> Int,那么extend 是否具有String->Int->String->Int->State 类型?

【问题讨论】:

    标签: haskell


    【解决方案1】:

    关闭。给定

    type State = String -> Int
    extend :: State -> String -> Int -> State
    

    extend 的“真实”类型是(注意括号)

    extend :: (String -> Int) -> String -> Int -> (String -> Int)
    

    -- because -> is right-associative
    extend :: (String -> Int) -> String -> Int -> String -> Int
    

    extend 的第一个参数是 String -> Int 类型的函数,而不仅仅是 String 值。


    extend 并不是要查找“A”的值;它旨在创建一个新状态,其中“A”的值具有给定值。例如:

    let st' = let st "A" = 3 in extend st "A" 5 
    let st'' = extend "B" 2 st'
    

    st' 中查找“A”应产生值 5,而不是 3。同样,“B”未在 st' 中定义,但在 st'' 中。

    >>> st' "A"
    5
    >>> st'' "A"
    5
    > st' "B"
    *** Exception: <interactive>:2:5-15: Non-exhaustive patterns in function st'
    >>> st'' "B"
    2    
    

    【讨论】:

    • 对不起,如果这真的很简单,但这是否意味着(在您的示例中)st "A"extend 类型的(String-&gt;Int) 部分(即State)?如果是,那么它后面应该跟一个字符串吗?
    • 对。在调用extend st "A" 5st 需要有类型String -&gt; Int。在表达式let st "A" = 3 中,我使用模式匹配来定义一个偏函数st,它在输入“A”时返回3。 st 没有为任何其他输入值定义。如果您正确定义extendst'不会为任何其他输入定义,st'' 仅定义为“A”和“B”。
    • 其实我想知道extend st "A" 5 中的st "A" 是否有类型(String -> Int),那么它后面不应该跟String,因为extend 的类型是@ 987654351@
    • extend 的类型为State -&gt; String -&gt; Int -&gt; State,因此extend st 的类型为String -&gt; Int -&gt; Stateextend st "A" 的类型为Int -&gt; State。这使得extend st "A" 2 具有State 类型,这意味着如果你给extend 和旧状态、一个字符串和一个整数,你会得到一个新状态。
    • @Liumx31 在extend st "A" 5 中没有st "A":函数st(其类型为String-&gt;Int)不适用于任何东西,它作为第一个参数传递给@987654365 @.
    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 2014-04-05
    • 1970-01-01
    • 2013-08-25
    • 2017-12-24
    • 2015-08-05
    • 2019-01-22
    • 2020-07-25
    相关资源
    最近更新 更多