介绍一门很有前景的语言Nim(3)

函数

函数的定义与 python 相仿
不过,需要对参数、返回值的类型进行说明

proc get_max(x: int, y: int): int =
    if x > y:
        return x
    else:
        return y

echo get_max(10,18)

这里的传入参数 a, b 是按值传递的,
也就是说
修改它们的值,不会影响到主调方,这点与python一样
与 python 不同的是,
这里的 x 与 y 根本不允许你在函数中修改,那会编译不过
另外,
nim 还提供了与 c 语言传引用效果相同的手法,
用 var 来修饰类型,在子程序中就可以修改了,并且
会影响调用方的值,即形参的变化影响实参

var
    a = 5
    b = 10

proc swap(a: var int, b: var int) = 
    (a, b) = (b, a)

swap(a,b)
echo a
echo b

这段程序会引起 a, b 的值发生交换

在调用方式上,nim 别出心裁,引入了很多特性

proc add(x: int, y: int): int = 
    return x + y

var
    a = 20
    b = 5
    c = 1

echo add(a, b)
echo a.add(b)
echo add(add(a, b), c)
echo a.add(b).add(c)

echo (a.add b)
echo a.add b

这与对象啥的没有关系
a.f(b)f(a,b) 是完全等价的
这样做的好处是,有些场合的连续调用时,不需要用括号来嵌套
这是 nim 的一种通用特性,
被称为:uniform function call
实际上,在没有歧义时,括号也是可以省略的
echo 不就没括号吗?

echo 对每个有返回值的函数,
都会给它准备一个变量 result, 并且赋好缺省值
最后也会自动返回它

proc leap(year: int):bool =
    if year mod 4 == 0: result = true
    if year mod 100 == 0: result = false
    if year mod 400 == 0: result = true

echo leap(2000)

以上是判断是否为闰年的例子

标准模块

nim 内置了大量的标准模块来处理常见的任务
strutils
sequtils
math
就相当常用
引入模块的方式与 python 类似
不过 import x 默认把该模块的所有函数都加入当前的名字空间

import math
from strutils import split
from strutils import join
from sequtils import zip 

echo sin(PI/7).round(2)
echo 2 ^ 32

let a = "this is my world"
var x = a.split()
echo x.join("--")

echo zip([1,2,3,4,5],"abc")

运行结果为:

0.43
4294967296
this--is--my--world
@[(1, 'a'), (2, 'b'), (3, 'c')]

简单交互

让用户输入个加法算式,我们求结果。
用户输出 q 则退出

from strutils import strip, split, parseInt
from sequtils import map

while true:
    echo "请输入加法算式(例如 12 + 31):"
    let s = readLine(stdin).strip()
    if s == "q": break
    let a = s.split("+").map(parseInt)
    echo a[0] + a[1]

如果希望从文件读入
最简单的方法是用:readFile
给个文件名,以串的形式返回所有文本内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值