Swift is like Haskell

栏目: Swift · 发布时间: 7年前

内容简介:Swift是一门多泛式语言,而且参考了很多其它语言的实现,所以总能在不同语言里看到一些Swift的影子。前段时间看到一篇文章,Swift is like Scala,里面做了Swift和Scala一些语法的对比,有些代码块语法上是很像的。最近又看到了这儿只是列出两门语言一些类似的点,或语法,或概念上的。但在真正使用的时候,差别还是巨大的。如果想了解真正的工程中,Haskell的使用,可以参考下

Swift是一门多泛式语言,而且参考了很多其它语言的实现,所以总能在不同语言里看到一些Swift的影子。

前段时间看到一篇文章,Swift is like Scala,里面做了Swift和Scala一些语法的对比,有些代码块语法上是很像的。最近又看到了 Swift is like Kotlin , Swift is like Go 。感觉这些挺有趣的,最近刚好有了解一点Haskell,所以就有了这个想法来对比下相似点。

这儿只是列出两门语言一些类似的点,或语法,或概念上的。但在真正使用的时候,差别还是巨大的。如果想了解真正的工程中,Haskell的使用,可以参考下 Github Haskell Star排名 等

对比

Hello World

​ Swift

print("Hello, world!")

​ Haskell

putStrLn "hello, world!"

变量定义

​ Swift

let a = 1
var m = 2

​ Haskell

-- haskell中没有var定义,只能定义不可修改的变量
let a = 1

显示指定类型

​ Swift

let a: Float = 5

​ Haskell

let a = 5 :: Float

字符串连接

​ Swift

let ret = "111" + "222"

​ Haskell

let ret = "111" ++ "222"

数组定义

​ Swift

let lst = ["1", "2", "3"]

​ Haskell

let lst = ["1", "2", "3"]

区间

​ Swift

let lst = [1 ... 5]

​ Haskell

let lst = [1 .. 5]	-- [1, 2, 3, 4, 5]

函数定义

​ Swift

func myAdd(_ a: Int, _ b: Int) -> Int { return a + b }

​ Haskell

myAdd a b = a + b

泛型函数

​ Swift

func myAdd<T: Numeric>(_ a: T, _ b: T) -> T { return a + b }

​ Haskell

myAdd a b = a + b

返回元组

​ Swift

func process(_ a: Int, _ b: Int) -> (Int, Int) {
    return (a + b, a * b)
}

​ Haskell

process a b = (a + b, a * b)

操作符另外的调用方式

​ Swift

(+)(1, 2)	// 输出3

​ Haskell

(+) 1 2

自定义操作符

​ Swift

infix operator <^> : AdditionPrecedence
func <^>(lhs: Int, rhs: Int) -> Int { return lhs + rhs }
5 <^> 6		// 11

​ Haskell

(<^>) :: Int -> Int -> Int
a <^> b = a + b
5 <^> 6		-- 11

Map

​ Swift

[1, 2, 3].map { $0 * 2}	// [2, 4, 6]

​ Haskell

map (*2) [1, 2, 3]		-- [2, 4, 6]

数据类型

​ Swift

public struct CGPoint {
    public var x: CGFloat
    public var y: CGFloat
}

​ Haskell

data Point = Point Double Double
              deriving (Show)

枚举类型

​ Swift

enum Shape {
    case circle(CGPoint, CGFloat)
    case rectangle(CGPoint, CGFloat, CGFloat)
}

​ Haskell

data Shape = Circle Point Double
           | Rectangle Point Double Double
             deriving (Show)

模式匹配

​ Swift

let e = Shape.circle(CGPoint(x: 0, y: 0), 100)
switch e {
case let .circle(pt, _):
    // code
case let .rectangle(pt, _, _):
    // code
}

​ Haskell

shapeInfo :: Shape -> String
shapeInfo (Circle pt _) = "Circle point" ++ show pt
shapeInfo (Rectangle pt _ _) = "Rectangle point" ++ show pt

以上所述就是小编给大家介绍的《Swift is like Haskell》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

CSS商业网站布局之道

CSS商业网站布局之道

朱印宏 / 清华大学出版社 / 2007-1 / 75.00元

本书是一本CSS技术专著。 主要从布局角度全面、系统和深入地讲解CSS在标准网站布局之中的应用。很多读者经过初步的学习之后就能够使用CSS设计出一些漂亮的网页样式,于是便乐在其中,踌躇满志,这是好事,但千万不要自我陶醉,因为你还未领略CSS的博大精深。用CSS容易,难的是全部都用CSS。CSS的精髓是布局,而不是样式,布局是需要缜密的逻辑思维和系统设计的,而样式只需要简单地编写代码或复制即可。本书......一起来看看 《CSS商业网站布局之道》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具