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

SICP Ch.3.1/ 3.2:为变量赋值对象的参数值

赋值操作是通过 set! 语句来实现的。下面是一些示例,展示如何为变量赋值对象的参数值

示例 1:简单的赋值

假设我们有一个变量 x,我们希望将其值设置为一个新的值。

代码语言:javascript
复制
(define x 10)  ; 定义变量 x 并赋值为 10
(display x)    ; 输出 x 的值,结果是 10
(newline)

(set! x 20)    ; 将 x 的值设置为 20
(display x)    ; 输出 x 的值,结果是 20
(newline)

示例 2:使用参数值进行赋值

假设我们有一个函数,它接受一个参数,并将该参数的值赋给一个全局变量。

代码语言:javascript
复制
(define y 0)  ; 定义全局变量 y 并赋值为 0

(define (set-y new-value)
  (set! y new-value))  ; 将参数 new-value 的值赋给全局变量 y

(display y)  ; 输出 y 的值,结果是 0
(newline)

(set-y 42)   ; 调用函数 set-y,将 y 的值设置为 42
(display y)  ; 输出 y 的值,结果是 42
(newline)

示例 3:使用对象的参数值进行赋值

假设我们有一个对象(在 Scheme 中可以使用列表来模拟对象),我们希望将对象的某个属性值赋给一个变量。

代码语言:javascript
复制
(define person (list 'name "Alice" 'age 30))  ; 定义一个对象 person

(define (get-age person)
  (cadr (cdr (cdr person))))  ; 获取对象的 age 属性值

(define age 0)  ; 定义变量 age 并赋值为 0

(set! age (get-age person))  ; 将 person 的 age 属性值赋给变量 age

(display age)  ; 输出 age 的值,结果是 30
(newline)

示例 4:使用局部变量和赋值

在函数内部使用局部变量,并通过赋值操作改变其值。

代码语言:javascript
复制
(define (increment-counter counter)
  (let ((new-counter counter))  ; 定义局部变量 new-counter 并赋值为 counter
    (set! new-counter (+ new-counter 1))  ; 将 new-counter 的值加 1
    new-counter))  ; 返回新的 counter 值

(define counter 5)  ; 定义变量 counter 并赋值为 5

(display counter)  ; 输出 counter 的值,结果是 5
(newline)

(set! counter (increment-counter counter))  ; 调用函数 increment-counter,将 counter 的值加 1

(display counter)  ; 输出 counter 的值,结果是 6
(newline)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你是否听说过JavaScript环境模型?

环境是什么 节选《SICP3.2 The Environment Model of Evaluation 环境在计算过程必不可少,因为它决定了计算表达式上下文。...(>5) 给环境$add10中变量value赋值2。(>5) 进入环境$add10。 在环境$add10中,给变量increment赋值10。...值得一提是,形也是变量,它在形列表里定义,在函数调用时获得初始值。 变量绑定 环境使用变量绑定来存放变量值, 绑定(binding) 与函数中变量一一对应。...因此,变量定义、取值、赋值可以表达: this.bindingContainer[name] = null; //定义 value = this.bindingContainer[name];...验证环境模型 以chrome观察平台,通过console.dir方法可以展示一个对象状态。 特别的,console.dir一个函数可以查看它环境信息。

1.4K30

JAVA入门1 原

, 代码中 int 型变量 score1 可以直接 double 型变量 score2 完成赋值操作,运行结果: 82.0  这种转换称为自动类型转换。...可以看到,通过强制类型转换将 75.8 赋值给 int 型变量后,结果 75,数值上并未进行四舍五入,而是直接将小数位截断。...自增和自减运算符只能用于操作变量,不能直接用于操作数值或常量!例如 5++ 、 8-- 等写法都是错误滴! 3.3赋值运算符 赋值运算符是指为变量或常量指定数值符号。...调用带方法与调用无方法语法类似,但在调用时必须传入实际数值 ? 例如: ? 运行结果: 欢迎您,爱慕课!...("带有一个整型参数print方法,参数值:" + age); } } 编程练习1: 编写一个JAVA程序,创建指定长度 int 型数组,并生成 100 以内随机数数组中每个元素赋值,然后输出数组

2.6K20
  • NUS CS1101S:SICP JavaScript 描述:前言、序言和致谢

    想想看:最小物理开关元件行为是由量子力学建模,由微分方程描述,其详细行为由在计算机上执行数值逼近所捕捉,而这些计算机由…组成! 将三个焦点分开识别并不仅仅是战术上便利。...本书中使用 Scheme 方言已经从原始 Lisp 发展出来,在几个重要方面与后者不同,包括变量绑定静态作用域和允许函数产生函数作为值。...我们可以进行过程和数据抽象,我们可以使用高阶函数来捕捉常见使用模式,我们可以使用赋值和数据变异来模拟局部状态,我们可以使用流和延迟求值来链接程序部分,我们可以轻松实现嵌入式语言。...从 Lisp 中,我们获得了源自简单语法、将程序统一表示数据对象以及垃圾回收堆分配数据元语言能力。...》(SICP JS) JavaScript 改编是在新加坡国立大学(NUS) CS1101S 课程开发

    18010

    JavaScript基础

    (“”); 向控制台输出一句话(浏览器控制台,f12可以打开)多用于程序调试,观察变量值 javaScript是弱类型,松散型 变量 声明 赋值 先声明再赋值 不用声明直接赋值 x=10;//ok...区别是:undefined变量定义了 但是跟本就没有赋值 如:var x; 此时x值就是undefined null,变量定义了,有值,并且是值就是null 如:var z=null; 一般用于对象初始值...数值对象,布尔,字符串 转换成字符串 可以使用 String()来进行判断一个变量值是否null或undefined String()函数 number 可以存储任何数字,整型和浮点型 var...(Boolean(undefined));//false 赋值运算符 右边赋值给左边+= -= *= /= %= 函数 定义调用 方式一 定义: function 函数名(形1,形2,形3,.....;//通过函数名调用 方式二 定义: 函数定义表达式:(定义函数是匿名函数,赋值给了一个变量) var 变量名=function (形1,形2,形3,...){ 调用: }

    83420

    JavaScript单元测试利器Jest+mocha+chai

    2:保存与赋值是值本身。3:使用typeof检测数据类型。4:基本类型数据是值类型。引用类型变量特点是1:占用空间不固定,保存在堆中。2:保存和赋值是指向对象一个指针。...声明空对象时我们可以将其初始化为null。Null:null表示一个空对象指针,使用typeof检查null时会返回object。Boolean:true真,false假。...我们使用boolen()对各种数据类型变量进行强制转换时规则如下:非空字符串,非零数值,非空对象进行boolen()转换时返回true。...Number:NaN含义:not a Number或者非数值。任何涉及NaN操作都将返回NaN;NaN与任何数值都不相等包括其自身。Object:Object是一组数据或功能集合。...For-in循环语句:For(声明变量 in 对象){代码段}循环输出变量顺序不可预知,对象值不能是null或者undefined。

    58720

    类中构造方法

    1.2.2、初始化成员变量 创建对象时,可以直接成员变量赋值,无需再在对象产生后再赋值。...public 类名(参数类型 参数1,参数类型 参数2,…){ ​ //创建对象时要执行逻辑,经常成员变量赋值 } public class Person{ private String name...,Java会自动我们补齐一个无构造方法。...3.2、注意事项 接口没有构造方法,抽象类具有构造方法 构造方法不能被继承,如:父类叫Person,子类叫Student 继承构造方法后,那么我new Person()后是子类对象,还是父类对象,...如:public、default、private 3.3、构造方法与set方法 构造方法是为了在创建同时直接属性赋值。 set方法时在创建对象之后,再重新成员变量赋值,是修改值过程。

    1.1K20

    Swift2.1-下标脚本下标脚本

    中,创建了一个新TimeTable实例来表示索引值3倍。数值3作为结构体构造函数入初始化实例成员multiplier。 你可以通过下标脚本来得到结果,比如threeTimesTable[6]。...定义了一个名为numberOfLegs变量并用一个字典字面量初始化出了包含三对键值字典实例。numberOfLegs字典存放值类型推断[String:Int]。...下标脚本可以使用变量参数和可变参数,但是不能使用输入输出(in-out)参数或提供默认数值。...grid 将值赋给带有row和column下标脚本matrix实例表达式可以完成赋值操作,下标脚本入使用逗号分割: matrix[0, 1] = 1.5 matrix[1, 0] = 3.2 上面两条语句分别让...matrix右上值 1.5,坐下值 3.2: ?

    1.1K30

    【C++】掌握C++类六个默认成员函数:实现高效内存管理与对象操作

    为了避免混洗这两种情况,要求对象实例化调用无构造函数,不允许添加括号 对于无构造与有构造,无构造需要函数内部设置好数值,而有构造采用外部实参数值。...给出回答:我们从对于内置与自定义类型处理上来看,编译器虽然对于内置类型初始化数值随机值,但是确保了内置类型完成了初始化操作,避免了缺乏构造函数而导致编译错误。...对象生命周期结束时,C++编译系统自动调用析构函数 3.2 验证是否会自动调用析构函数 析构函数对于内置与自定义类型处理方式(调用析构函数中this指针存储对象地址) 对于内置与自定义类型处理: 内置类型不处理...,编译器会生成一个默认赋值运算符重载,此时用户再类外自己实现一个全局赋值运算符重载,就和编译器在类中生成默认赋值运算符重载冲突,故而赋值运算符只能是类成员函数(其他运算符函数可以重载全局函数)...特性:用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值方式逐字节拷贝 默认生成赋值运算符重载对于内置类型与自定义类型处理方式 内置类型成员变量直接赋值 自定义类型成员变量需要调用对应类赋值运算符重载完成赋值

    11200

    ES6(三):变量解构赋值

    解构赋值语法是一个Javascript表达式,这使得可以将值从数组或属性从对象提取到不同变量中,文中主要讲数组解构赋值对象解构赋值、字符串解构赋值数值和布尔值解构赋值以及函数参数解构赋值...,导致左边变量undefined: cdoe let [ [a, [b]], c ] = [ [1, []], 3 ]; console.log(a); // 1 console.log...对象解构赋值 变量解构赋值和数组解构赋值不太一样: 数组解构赋值:元素是按次序排列变量取值由变量所处位置决定 对象解构赋值对象属性没有次序,因此变量必须和属性同名才能取到 正确值...: code let { length: len } = 'string'; console.log(len); // 6 数值和布尔值解构赋值 数值和布尔值也能进行解构赋值,此时他们都被转化为了对象...函数参数也可以进行解构赋值,这是一个解构赋值运用比较多场景,其实就是对之前所讲数组、对象、布尔值、数值解构赋值一种实际使用: code function add([a, b]) { return

    75320

    【C++入门】缺省参数、函数重载与引用

    缺省参数 1.1 缺省参数概念 缺省参数是声明或定义函数时函数参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形缺省值,否则使用指定实参。...,使用参数默认值 Func(10); // 传时,使用指定实参 return 0; } 结果如下: 可以看到在定义void Func(int a = 0)时给int a 参数赋值...0; 所以当使用该函数时,如果不传参数:Func(); 就默认传参数之前定义时赋值0; 如果传参数:Func(10); 就正常传即可; 注意: 缺省参数不能在函数声明和定义中同时出现(写在声明中...引用通常用于传递函数参数、返回函数值和简化语法 在C++中,我们可以通过以下方式定义一个引用: type &ref = variable;//类型& 引用变量名(对象名) = 被引用实体 例如:...n用static修饰静态全局变量即使函数调用结束也不会被释放,所以可以用引用作为函数返回值,这样就不需要再临时拷贝一份,减少了空间消耗; 那么作为函数返回值有什么作用呢?

    16410

    【简明 Python 教程】学习笔记【函数】 原

    你可以使用同一个global语句指定多个全局变量。例如global x, y, z。 默认参数值:默认参数值应该是不可变。...【重要】 只有在 形表末尾 那些参数可以有默认参数值,即你不能在声明函数形时候,先声明有默认值而后声明没有默认值。 这是因为赋给形值是根据位置而赋值。...关键参数: 如果你某个函数有许多参数,而你只想指定其中一部分,那么你可以通过命名来这些参数赋值——这被称作 关键参数 ——我们使用名字(关键字)而不是位置(我们前面所一直使用方法...例如,如果一个变量None,可以表示它没有值。 除非你提供你自己return语句,每个函数都在结尾暗含有return None语句。...请记住Python把 每一样东西 都作为对象,包括这个函数。我们会在后面的类一章学习更多关于对象知识。 如果你已经在Python中使用过help(),那么你已经看到过DocStings使用了!

    38310

    C++中引用详解

    【例2】: void swap(int &p1, int &p2) //此处函数p1, p2都是引用 { int p; p=p1; p1=p2; p2=p; }    在程序中调用该函数,...这时,被调函数就成为原来主调函数中实参变量对象一个别名来使用,所以在被调函数中对形参变量操作就是对其相应目标对象(在主调函数中)操作。...(2)使用引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形分配存储单元,形参变量是实参变量副本;如果传递对象,还将调用拷贝构造函数...因此上面的表达式就是试图将一个const类型对象转换为非const类型,这是非法。   引用型参数应该在能被定义const情况下,尽量定义const 。...【例6】 测试用返回引用数值作为赋值表达式左值。

    1.3K50

    Web前端学习 第3章 JavaScript基础教程19 原始类型

    原始类型(或叫值类型):数值、字符串、布尔、Null、Undefined 引用类型:对象 原始类型赋值变量,遍历存储是这个值本身,而你用类型赋值变量变量存储是一个引用,这个引用会指向内存中这个对象...,但是我们只是将obj1name属性赋值xiaohong,并没有将obj2name属性赋值xiaohong,为什么他们都变成了同一个值?...这就是原始类型与引用类型区别:变量存储原始类型,仅仅是存储它值,所以我们将存储原始类型变量重新赋值,不会影响其他变量,但是变量存储引用类型时候,情况有所改变,变量并不是存储这个对象本身,而是存储这个对象引用...,而这个引用可以指向这个变量本身,所以当我们将obj1赋值给obj2时候,其实是让这两个变量引用同时指向一个对象,这样当我们改变这个对象时候,两个变量都会有变化。...,它值已经变成了函数中赋值,这是因为原始类型传时候,实参是形副本,改变形时候不会影响实参,而应用类型传时候,形和实参对象都指向一个引用,这样当我们修改形时候,其实是操作了内存中对象

    36420

    Kotlin数据类型和基本语法介绍

    常量与变量 介绍: 通过var关键字定义可变变量 通过val 关键字定义不可变变量.类似于java之中final修饰符.赋值后不能修改....也可以将区间理解范围 实例1: package cn.zinyan.key class Demo() { //带返回值和传函数 ,返回值Int fun test1(a: Int..., f: Array): Int { return a } //带返回值和传函数 ,返回值String fun test2(a: Int,...B:100000 A:100000,B:100000 经过赋值之后 三个等号比较两个box对象:false 经过赋值之后 两个等号比较两个box对象:true 注意: 请注意=与?...=赋值区别. 类型转换 介绍: 由于没有基础类型, 全是封装独立对象.所以在Kotlin之中,不能隐式转换. Kotlin之中不支持这种直接转换.

    19110

    C++引用高级使用!

    这时,被调函数就成为原来主调函数中实参变量对象一个别名来使用,所以在被调函数中对形参变量操作就是对其相应目标对象(在主调函数中)操作。...(2)使用引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形分配存储单元,形参变量是实参变量副本;如果传递对象,还将调用拷贝构造函数...因此上面的表达式就是试图将一个const类型对象转换为非const类型,这是非法。 引用型参数应该在能被定义const情况下,尽量定义const 。...主要原因是当对象属性是与某种业务规则(business rule)相关联时候,其赋值常常与某些其它属性或者对象状态有关,因此有必要将赋值操作封装在一个业务规则当中。...【例6】 测试用返回引用数值作为赋值表达式左值。

    54320

    Java学习历程之----进阶篇(三)

    一、方法定义 声明成员方法可以定义类行为,行为表示一个对象能够做事情或者能够从一个对象取得信息。类各种功能操作都是用方法来实现,属性只不过提供了相应数据。...如果方法不返回任何值,则声明为void,java对待返回值要求很严格,方法返回值必须与所说明类型相匹配,如果方法说明有返回值,比如说int,那么方法分支返回时都必须返回一个整数值。...二、方法调用 一般来说,可以通过以下方式来调用成员方法: methodName({paramList}) 关于方法参数,经常会提到形参与实参,形是定义方法时参数列表中出现参数,实参是调用方法时方法传递参数...方法和实参具有以下特点: 1) 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配内存单元。因此,形只有在方法内部有效,方法调用结束返回主调方法后则不能再使用该形参变量。...2) 实参可以是常量、变量、表达式、方法等,无论实参是何种类型量,在进行方法调用时,它们都必须具有确定值,以便把这些值传送给形。因此应预先用赋值、输入等办法使实参获得确定值。

    23120

    Dart学习笔记

    布尔类型bool type variable = val 在定义时指定固定类型type,则该变量类型固定,且只能接收特定类型赋值 比较特殊,如果type是Object或者dynamic,则该变量可以接收任意类型数值赋值...,则会推断赋值数值类型,比如 var age = 22; //int 类型 变量如果没有初始化,默认值null(即便是基本类型),比如 int value1; print...final修饰变量只允许被赋值一次,const修饰变量必须在初始化时赋值,且也不能再次赋值,比如 const a = 1; //自动类型推断 final b = new DateTime.now...returnType name (varible…),比较独特两种定义方式,以及Dart允许将函数作为形(函数类型Function) 可选参数 returnType name ({type1...Dart使用as进行对象强制类型转化,失败会抛出异常 Dart使用is进行对象类型判断,返回布尔类型数值,比如 class A{} class B{ int age; } A a = A(

    1.1K30

    Python 函数知识大全

    语法: def 函数名( 参数 ): 函数表达式 return 函数表达式值 默认情况下,参数值和参数名称是按函数声明中定义顺序匹配起来。...不可变类型:变量赋值a=5后再赋值a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a值,相当于新生成了a。...可变类型:变量赋值la=[1,2,3,4] 后再赋值la[2]=5则是将list la第三个元素值更改,本身la没有动,只是其内部一部分值被修改了。...按传值方式复制了变量b,a和b都指向了同一个 Int 对象,在a=10时,则新生成一个int值对象 10,并让a指向它。...2、形参与实参 什么是形?顾名思义,形就是形式上参数,可以理解数学X,没有实际值,通过别人赋值后才有意义。相当于变量。 什么是实参?

    89910

    探讨Java参数传递问题

    三、数据在内存中存储: 1、基本类型存储: 基本类型局部变量变量以及数值都是存储在栈内存中。...所以基本类型变量变量值本身是不会改变,重新赋值后,只是指向了新引用而已。 ? 重新赋值 基本类型成员变量:基本类型成员变量变量名和值都是存储在堆内存中,其生命周期和对象是一致。...引用传递:当参数是对象时候,其实传递对象地址值,所以实参地址值传给形后,在方法内对形进行操作会直接影响真实内容。...方法,所以在userTest方法中对user进行操作直接影响地址值x0001对象。...所以接下来在方法中对user操作都是对地址值x0002对象操作,自然不会影响到地址值x0001对象。所以就出现了第二次运行结果。

    97820

    编程语言中变量作用域与闭包

    ,止到外围环境空(foo、bar 模块全局环境外围指向均为空) 去语言内置变量中去查找,找到则直接返回;找不到就会报错。...需要注意是,这里只是将变量名提前,赋值动作不变,显然,Javascript 采用了这一思想(这其实是forward_declaration 技术一种实现手段)。...由于 Python 不区分变量声明,所以在第一次初始化变量时(必须赋值操作)将变量加入当前环境中。...如果在没对变量进行初始化情况下使用该变量就会报运行时异常,但如果仅仅是访问(并不赋值情况下,查找变量顺序会按照 LEGB 规则 (Local, Enclosing, Global, Built-in...就是一闭包对象,它包括两部分,一个函数与声明函数时环境。

    52920
    领券