作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始学习 F# 并且对这个学校作业感到困惑。如果这是一个愚蠢的问题,请原谅,我无法通过搜索找到答案。任务要求我:
复数集合是实数对的集合。
定义类型 complex
表示具有浮点分量的复数。
定义一个函数 mkComplex : float -> float -> complex
给出两个浮点数
numbers 返回相应的复数。
定义一个函数 complexToPair : complex -> float * float
给定一个复数 (a,b)
返回对 (a, b) 。
这是我的尝试:
首先我定义类型 complex
:
type Complex = float * float
mkComplex
:
let mkComplex a b = Complex (a, b)
complexToPair
是给我带来麻烦的那个。如何让复杂类型正确访问其中的元素?以下工作运行良好,但我收到了类型检查错误的垃圾邮件。
let complexToPair (a: Complex) = (a.[0], a.[1])
a.[0]
和
a.[1]
以红色下划线并给我以下警告:
最佳答案
您正在使用的类型定义正在定义类型别名。当你说:
type Complex = float * float
Complex
只是一个元组。您可以使用
(1.0, 1.0)
创建其值.当你有一个值
c
对于这种类型,您可以使用
fst c
访问元素和
snd c
,或使用模式匹配。
type Complex = { a:float; b:float } // Using a record
type Complex = Complex of float * float // Using a discriminated union
关于f# - 如何在 F# 中以自己定义的类型正确访问元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60065851/
我是一名优秀的程序员,十分优秀!