Swift is like Haskell

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

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

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

前段时间看到一篇文章,Swift is like Scala,里面做了Swift和Scala一些语法的对比,有些代码块语法上是很像的。最近又看到了 Swift is like KotlinSwift 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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

A Philosophy of Software Design

A Philosophy of Software Design

John Ousterhout / Yaknyam Press / 2018-4-6 / GBP 14.21

This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first ......一起来看看 《A Philosophy of Software Design》 这本书的介绍吧!

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

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

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

HSV CMYK互换工具