【问题标题】:Haskell - Give Type Declaration of FunctionHaskell - 给出函数的类型声明
【发布时间】:2017-07-08 18:27:53
【问题描述】:

我正在修改一个我在 Haskell 上进行的测试,其中一个问题是:

(b) 给出类型声明以完成以下(可能不完整)函数定义:

二。 unzOp ((x,y):zs) = ((x+1):(fst(unzOp zs)),(y+2.5):(snd(unzOp zs)))

有人可以帮我回答这个问题吗?如果您能详细说明为什么答案是这样,那将不胜感激。

谢谢

【问题讨论】:

  • 你走了多远?你被困在哪里了?

标签: function haskell types functional-programming


【解决方案1】:

首先,您必须确定数据的“形状”。你可以通过寻找构造函数来做到这一点。 这里有(:),列表的构造函数和(,),元组的构造函数。 可以推断该类型具有形状

unzOp :: [(a, b)] -> ([a], [b])

然后您可以在ab 上查找更多约束。 由于x+1,您必须假设x 是一个数字。 因为y+2.5,您必须假设y 也是一个数字,但是是小数。

所以,

unzOp :: (Num a, Fractional b) => [(a, b)] -> ([a], [b])

说实话,数字类型并不是 Haskell 中最简单的事情。 您可以在 ghci 中使用 :t 询问表达式的类型。

:t (\x -> x + 1)
(\x -> x + 1) :: Num a => a -> a

顺便说一句,如果你将一个空列表传递给unzOp 会发生什么?

或者换句话说,unzOp 是递归定义的,但基本情况是什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多