首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用变量和文字数字调用ghci中的函数时的不同行为

在ghci中,使用变量和文字数字调用函数会有不同的行为。

当使用变量调用函数时,变量的值会作为函数的参数传递进去,函数会根据传入的参数进行计算并返回结果。这样可以实现对函数的复用,通过改变变量的值来得到不同的结果。

例如,假设有一个函数add,用于将两个数字相加:

代码语言:haskell
复制
add :: Int -> Int -> Int
add x y = x + y

在ghci中,我们可以定义一个变量a,并将其赋值为2,然后使用变量a调用add函数:

代码语言:haskell
复制
> let a = 2
> add a 3
5

这里,变量a的值2被传递给add函数的第一个参数x,而数字3作为第二个参数y,函数计算得到结果5。

而当使用文字数字调用函数时,文字数字直接作为函数的参数传递进去,函数会直接使用这些参数进行计算并返回结果。这种方式适用于只需要一次性计算的情况。

继续以上面的add函数为例,在ghci中可以直接使用文字数字调用add函数:

代码语言:haskell
复制
> add 2 3
5

这里,文字数字2和3直接作为add函数的两个参数传递进去,函数计算得到结果5。

总结起来,使用变量和文字数字调用ghci中的函数时的不同行为在于变量可以实现对函数的复用,而文字数字适用于一次性计算的情况。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Haskell 自定义type与typeclass

自定义type Part One Haskell中使用data关键来定义新数据类型: data BookInfo = Book Int String [String] deriving (Show)...我们也可以给自定义类型添加多态性。只要在类型定义中使用类型变量就可以做到这一点。...解释下:class Eq a where代表我们定义了一个typeclass叫做Eq,a是一个类型变量,他代表任何我们在定义instance类型,接下来我们定义了几个函数,不一定要实现函数但一定要写出函数类型声明...这是说能让类型符合class行为所最小实现函数数量。而Eqminimal complete difinition需要==或者/=实现其中一个。...其实这可以理解为在定义Num这个class,必须先定义他为Eqinstance。 泛型instance Maybe或者List这种与TrafficLight不同,Maybe是一个泛型。

7410

深入typeclass_Haskell笔记4

零.Typeclass与Class Typeclass就是Haskell接口定义,用来声明一组行为 OOPClass是对象模板,用来描述现实事物,并封装其内部状态。...派生自某类(deriving (SomeTypeclass))是说具有某类定义行为,相当于OOP实现了某个接口,所以具有接口定义行为 一.声明 class关键用来定义新typeclass:...前两条类型声明是接口所定义行为(通过定义函数类型来描述)。...后两条函数实现是可选,通过间接递归定义来描述这两个函数关系,这样只需要提供一个函数实现就够了(这种方式称为minimal complete definition,最小完整定义) P.S.GHCi环境下...a Just True :: Maybe Bool 所以,Functor定义行为是保留大类型不变(f a,这里a是类型变量),允许通过映射(fmap函数)改变小类型(f a变到f b,这里a和b

50210
  • 回调在事件妙用 ### 回调: 回头调用,函数 A 事先干完,回头再调用函数 B。事件使用。通过以上方式,可以其本模块调用其它模块变量,有些细节与严格意义上回调不一致,但基本思想一致

    . ### 回调: 回头调用,函数 A 事先干完,回头再调用函数 B。 函数 A 参数为函数 B, 函数 B 被称为回调函数。...至于为何要用参数形式传入,而不是直接在 A 中直接调用 B 函数,主要是为了变量灵活性考虑。 为何要使用回调? 比较常见情况是两个不同模块之间需要相互调用 事件使用。...因此, undo 栈永远无法添加绘制标注命令。 --- 如果将 “命令 push 到栈操作放在事件函数里面来操作,是不是问题就解决了? 是滴,这样可以解决问题。...这个时候,使用回调概念,将函数当参数传入,问题轻松加愉快就解决了。...通过以上方式,可以其本模块调用其它模块变量,有些细节与严格意义上回调不一致,但基本思想一致。

    1.6K30

    newtype_Haskell笔记8

    一.ZipList与List 在List场景,xs ys表示从左侧xs取出函数作用于右侧ys每一项,有两种实现方式: 笛卡尔积 拉链式一一结对 分别对应[]和ZipList,例如: import...类定义行为,具体见Functor与Applicative_Haskell笔记7 二.newtype ZipList就是因这个场景而产生,本质上是对List包装,定义如下: newtype ZipList...除此之外,就与data关键没什么区别了 P.S.关于值构造器与参数,见类型_Haskell笔记3 三.对比type和data 关键 作用 应用场景 data 定义自己(数据)类型 想要定义完全新类型...type 给现有类型起别名,得到东西完全等价于原类型,可无条件换用/混用 想让类型签名更清楚(语义化)时候 newtype 将现有的类型包成一个新类型,得到类型与原类型不同,不能换用/混用 想让现有类型具有一种不同接口...),例如: > head [1, undefined, 3, undefined, undefined] 1 > let (a, _) = (1, undefined) in a + 1 2 特殊地,函数调用模式匹配本身是需要计算

    61530

    Haskell 函数语法

    如果按照书中写法是会报没有匹配项错误,按照let { … } 写法则没有问题 在调用lucky,模式会从上到下进行检查,一旦有匹配则对应函数体便被应用。...guard由跟在函数名及参数后边竖线标志,通常竖线都是靠右一个缩进排成一列。一个guard就是一个布尔表达式,如果是True,就使用对应函数体。...<- xs] where bmi weight height = weight / height ^ 2 let关键 let绑定是个表达式,允许在任何地方定义局部变量,而对不同guard...不过,把一个 let…in 放到限制条件也是可以,这样名字只对这个限制条件可见。在 ghci in 部分也可以省略,名字定义就在整个交互可见。...函数参数模式匹配只能用在定义函数使用,而case可以用在任何地方: describeList :: [a] -> String describeList xs = "The list is "

    7810

    热爱函数你,句句纯正 Haskell【类型篇】

    认识下 GHCi 命令: :l 用来导入当前路径或者指定路径下文件; Prelude> :l "C:\\Users\\ User\\Desktop\\HelloWorld\\HelloWorld.hs...:(7758,True,"HelloWorld"),各种类型可以互相组合使用; 以上,都是基础类型,可一眼带过~ 函数类型!...我们在下一小节做更为细致说明“类型类”~ 类型别名 一个数据类型可以由多个其他类型组成,在 Haskell ,可以用 type 关键将这些复杂类型替换成为其他简单名字; Prelude>...上图不在灰色方框内部分全部是类型类; Haskell 给很多“类型”分成了“类型类”,归为一类类型有着共同属性,不同类型所归类就称为类型类。...,以及类型类底下各种函数,真的太好用了吧~ 不用理会类型转换,特别是像 js 隐式转换,真的太爽了~ 在逐渐学习过程,不断提升强类型设计精髓理解。

    95630

    基础语法_Haskell笔记1

    Haskell特点: 变量不可变:函数式里变量与常量概念一样,源自数学思维,令x=1,那么x永远都是1 引用透明:函数调用能被直接替换成相应值,而不会影响函数行为。...参数列表后面多了| 条件表示不同函数体分支,被调用时满足条件就执行对应函数体并返回,否则就按顺序依次向下检查 注意,最后otherwise比较有意思,因为: > :i otherwise otherwise...,用来定义函数声明需要用到变量,及辅助函数 checkArea r | area < little = addSpace "little circle" ++ wrap sArea | area...: 多行声明必须对齐缩进,否则编译器无法正确解析(不知道要定义变量/函数列表结束了没) 子句中声明变量函数作用域是当前函数及其guard,且不包括同名函数其它模式 子句中可以用模式匹配 允许嵌套使用...作用域扩展到当前函数/List Comprehension,如果是在GHCi环境,在整个交互过程都可见 Case表达式 最常见case表达式就是函数定义参数模式匹配(case表达式语法糖): tail

    1.9K30

    Go语言初体验

    := range ary { // for range 用于遍历 slice 快捷方法 } 初体验 Go 命名规范 不同于其他语言,Go 函数变量、常量、类型和包都遵循一个简单和统一原则:...是推崇驼峰命名法,而不是 C 语言里面的下划线分割法 关键 我们先看一组数据对比: C++ 关键字数量 62 个 Java 关键字数量 53 个 Go 关键字数量 25 个 从关键数量上,也可以看得出...const 声明 类型:通过关键 type 声明 函数:通过关键 func 声明 变量标准声明格式是: var name type = expression // 上面声明方式很清晰,但是很啰嗦,...,倒不是要大家去学习垃圾回收工作原理,或者特别去关心变量逃逸行为,但是对于变量生命周期还是要搞清楚。...在使用 defer 声明函数被压力栈,所以有多个 defer 声明会根据 FIFO 先进先出顺序执行,如下 defer fmt.Println("1") defer fmt.Println("2")

    35210

    2020最全Java面试题--基础篇

    但是,当使用new关键,将隐式调用构造函数。 因此,它需要一个body。 如果我们将方法设置为static,则意味着它属于该类,但不属于特定对象。 始终调用构造函数来初始化对象。...因此,没有使用标记构造函数为静态。 继承 1. this关键作用? 在Java,”this“关键是指对象的当前实例。this调用本类属性,也就是类成员变量。...this调用本类其他方法 this可以用来调用构造函数,或者用来引用实例。 this关键除了可以引用变量或者成员方法之外,还有一个重大作用就是返回类引用 2....Java“ super”关键目的是什么? “ super”关键用于子类方法或构造函数。 它指对象直接父类。 通过使用“ super”,我们可以从子类方法调用父类方法。...我们也可以使用“ super”关键从子类构造函数调用父类构造函数。 10.是否可以在同一构造函数同时使用this()和super()?

    57831

    04.Java对象和类

    在Java使用关键new来创建一个新对象。创建对象需要以下三步: 声明:声明一个对象,包括对象名称和对象类型。 实例化:使用关键new来创建一个对象。...初始化:使用new创建对象,会调用构造方法初始化对象。 下面是一个创建对象例子: ?...扩展 java因强制要求类名(唯一public类)和文件名统一,因此在引用其它类无需显式声明。在编译,编译器会根据类名去寻找同名文件。...因为静态方法加载,优先于对象存在,所以没有办法访问对象成员。 3、静态方法不能使用this,super关键。...如果不是,那么就说这是对象特有数据,要存储到对象。 2、成员函数。(方法没有调用特有数据就定义成静态) 如果判断成员函数是否需要被静态修饰呢?

    95460

    50道JavaScript详解面试题,你需要了解一下

    在这种情况下,由于我们两次定义了相同变量,因此,会在控制台上引发错误。 但是,如果我们使用var定义相同变量,则控制台将返回50 。同样,在使用const定义变量,我们将得到相同错误。...答案,是B,因为异步函数在JavaScript返回Promises 。 8、等待关键会阻止应用程序所有JavaScript代码执行,直到返回等待Promises?...答案是False,await关键仅阻止执行包含await关键特定函数代码。 9、以下打印什么? JavaScript函数是对象,typeof name将输出function。...但是,可以在JavaScript通过在未将所有可能参数都传递给函数返回不同输出来执行重载。 29、return语句在数组forEach循环中做什么?...34、使用缩减函数从数字数组中找到最小值。 35、JavaScript子程序是什么? 子例程是主例程遇到函数,然后将其保存到对象并存储以供以后使用

    3.5K40

    从 Java 和 JavaScript 来学习 Haskell 和 Groovy(类型系统)

    Groovy:动态类型+强类型+类型推导 或者 静态类型+强类型+显式类型指定(这两者取决于写代码时候是使用关键 def 还是使用传统 int、float 这样方式显式类型指定)。...代码变量 o 发生了多次赋值,并且每次赋值类型都不相同。...这和 SQL select 1 from xxx 再求和写法没啥区别嘛。 2、模式匹配。这大概是 Haskell 我最喜欢部分。模式匹配在函数定义里面使用起来简直太漂亮了。...考虑到 typeclass 本身是一个表示行为定义,一方面很像接口,另一方面又很像 Java “重载”,同一个方法接受不同 type 参数,执行不同逻辑,而且同样是编译期确定。...继承和接口实现区分得最清晰,不同关键,语义清楚。

    54550

    超详解——python函数定义和调用——小白篇

    关键参数: 关键参数允许在调用函数指定参数名,参数顺序可以与定义不同。 greet(name="Alice", message="Hello") # 输出:Hello, Alice!...关键参数 关键参数使用使得函数调用更加灵活和清晰,尤其是当函数有多个参数。...函数重载 Python 不支持传统意义上函数重载(即同名函数不同定义),但是可以通过使用可变参数和默认参数来实现类似的功能。这种方法使得一个函数可以根据传递参数数量和类型表现出不同行为。...这个符号表包含了在函数定义所在模块所有全局变量。通过这个属性,我们可以访问函数全局上下文。...create_adder 返回一个新函数 adder,该函数可以使用创建环境变量 x。

    7510

    JAVA编程基础(四)开启Java语言编程之旅

    因此,你不能使用它们作为你程序变量命名。...在IDE(集成开发环境)编写代码好处是它对关键使用了语法颜色表示,你将在后面的内容看到。 一个java类结构 一个类是包含属性和行为离散实体(对象)。...仅使用构造函数方法来创建一个类实例。其他类型方法可以用于几乎任何应用程序行为。...调用静态方法和调用对象方法是不同:你应该使用类名.方法名(参数列表)调用: Logger l = Logger.getLogger("NewLogger"); 在这个例子,Logger是类名,getLogger...a.其实没什么不同 b.静态方法可以在任何语言中调用,而实例方法只能是一个实例对象使用 c.调用实例方法需要引用实例对象, 但是调用静态方法则不需要 d.一个静态方法"黏死"了定义它对象

    27620

    听GPT 讲Rust源代码--librarystd(6)

    在Unix系统,线程等待和唤醒是通过系统调用来实现不同操作系统有不同实现方式和机制。 在该文件,首先定义了一个Header结构体和一个函数init。...当线程退出,这些变量析构函数将被自动调用。 这个文件主要功能是在使用#[thread_local]宏声明变量上设置析构函数,并在线程退出执行相应清理操作。...栈溢出是指当一个函数不断递归调用或者分配大量局部变量,栈空间耗尽现象。...它们提供了一些系统调用封装,并根据平台特定API(如pthread)来实现线程相关操作,以便标准库能够在不同Unix系统上具有一致行为。...标准库这些函数通常使用了系统提供硬件加速指令或优化算法,以提供更高性能和更精确结果。在 UNIX 系统上,这些函数通常会调用 C 标准库对应函数,以提供与 C 语言相同行为

    20820

    使用Python绝对不应该做什么?

    这表示变量“数字”和“数字”是不同。因为这是Python新手犯最典型错误之一。...Python开发人员经常对Python如何绑定变量感到困惑。它绑定其变量外壳或周围全局范围,因此在调用内部函数时会查找闭包中使用变量值。...滥用__init__ 构造函数在 Python 由一个名为 __init__ 函数表示。形成对象,将调用 __init__ 方法,该方法分配内存并初始化类属性。...使用默认参数函数调用 对于初学者来说,带有默认参数函数是 Python 中一个很棒功能。参数很难利用。由于每次声明函数,Python 都会计算默认参数表达式,因此必须动态生成默认参数。...误用表达式 在 Python ,您可以通过为函数参数分配默认值来使其可选。但是,当您将默认值静音,此行为可能会令人困惑。

    1.2K40

    【收藏分享】2022年PHP中高级面试题(三)

    ()当给未定义变量赋值时会自动调用方法 __get()当获取未定义变量值时会自动调用方法 __construct()构造方法,实例化类自动调用方法 __destroy()销毁对象自动调用方法...__unset()当对一个未定义变量调用unset()自动调用方法 __isset()当对一个未定义变量调用isset()方法自动调用方法 __clone()克隆一个对象 __tostring...9.Php 数组解决hash冲突 哈希表,顾名思义,即将不同关键映射到不同单元一种数据结构。...而将不同关键 映射到不同单元方法就叫做哈希函数,冲突解决方案: 链接法 即当不同关键映射到同一单元,在同一单元内使用链表来保存这些关键。...这种由外部负责其依赖需求行为,我们可以称其 为 “控制反转(IoC)”依赖注入原理其实就是利用类方法反射,取得参数类型,然后利用容器构造好实例。然 后再使用回调函数调起。

    2.4K20
    领券