首页 > 其他分享 >sicp每日一题[2.80]

sicp每日一题[2.80]

时间:2024-11-17 08:56:24浏览次数:1  
标签:2.80 package make sicp zero done install 每日 define

Exercise 2.80

Define a generic predicate =zero? that tests if its argument is zero, and install it in the generic arithmetic package. This operation should work for ordinary numbers, rational numbers, and complex numbers.


这道题更简单,直接与0相比较就行,以下代码在 2.79 的基础上修改

(define (=zero? x) (apply-generic '=zero? x))

; 一般数字
(put '=zero? '(scheme-number) (lambda (x) (= x 0)))

; 有理数
(put '=zero? '(rational) (lambda (x) (= (numer x) 0)))

; 复数,这里我有点奇怪,用 (= (magnitude z) 0) 实现居然检查不出来,我也没找到原因是啥
(put '=zero? '(complex) (lambda (z) (= (real-part z) (imag-part z) 0)))

(install-scheme-number-package)
(define n1 (make-scheme-number 0))
(define n2 (make-scheme-number 10))
(=zero? n1)
(=zero? n2)

(newline)
(install-rational-package)
(define r1 (make-rational 5 10))
(define r2 (make-rational 0 20))
(=zero? r1)
(=zero? r2)

(newline)
(install-rectangular-package)
(install-polar-package)
(install-complex-package)
(define z1 (make-complex-from-real-imag 3 4))
(define z2 (make-complex-from-real-imag 0 0))
(=zero? z1)
(=zero? z2)

; 执行结果
'done
#t
#f

'done
#f
#t

'done
'done
'done
#f
#t

标签:2.80,package,make,sicp,zero,done,install,每日,define
From: https://www.cnblogs.com/think2times/p/18550238

相关文章

  • sicp每日一题[2.79]
    Exercise2.79Defineagenericequalitypredicateequ?thatteststheequalityoftwonumbers,andinstallitinthegenericarithmeticpackage.Thisoperationshouldworkforordinarynumbers,rationalnumbers,andcomplexnumbers.这道题也挺简单的,分别在......
  • 每日一题之最大子段和
    给定由n个整数组成的序列a1,a2,…,an,序列中可能有负数,要在这n个数中选取相邻的子段ai,ai+1,…,aj(1≤i≤j≤n),使其和最大,并输出最大的和。例如:当{a1,a2,…,an}={1,-3,7,8,-4,12,-10,6}时,最大子段和为:sum=23。输入格式:第一行输入一个正整数N,表示序列的长度。N≤100000;第2行输入N个整数输出格式......
  • 代码随想录算法训练营day47| 739. 每日温度 496.下一个更大元素 I 503.下一个
    学习资料:https://programmercarl.com/0739.每日温度.html#算法公开课单调栈:用数组模拟单调栈,今天的题中,栈中元素都保存的索引值基本思路:将新元素和栈顶索引对应值比较,如果要保持单调递增,则需要新元素不大于栈顶索引对应值;若满足就加入新元素索引到栈中;若不满足,就根据具体题意看......
  • 每日3
    include<bits/stdc++.h>usingnamespacestd;inta[2000200];intmain(){intn,c;cin>>n>>c;for(inti=0;i<n;i++)cin>>a[i];sort(a,a+n);longlongcnt=0;for(inti=0;i<n;i++){intl=i,r=n;while......
  • sicp每日一题[2.78]
    Exercise2.78Theinternalproceduresinthescheme-numberpackageareessentiallynothingmorethancallstotheprimitiveprocedures+,-,etc.Itwasnotpossibletousetheprimitivesofthelanguagedirectlybecauseourtype-tagsystemrequiresthat......
  • 【SpringBoot每日学习 - 第二天】SpringApplication 启动类:方法篇一
    SpringApplication类是SpringBoot应用程序的核心类之一,负责启动和初始化整个SpringBoot应用。通过调用SpringApplication.run()方法,SpringBoot会启动嵌入式的Web服务器(如Tomcat)并创建Spring容器。SpringApplication类具有一系列方法和配置项,允许开发者自定......
  • 【SpringBoot每日学习 - 第一天】SpringApplication 启动类:属性篇
    SpringApplication类是SpringBoot应用启动的核心类之一,包含了大量的属性,控制着应用启动的各个方面。这些属性涵盖了从配置环境、应用上下文类型、Banner显示、启动日志、事件监听等多个方面。以下是SpringApplication类中重要属性的详细说明及其用途:静态属性DEFAUL......
  • 每日OJ题_牛客_计算字符串的编辑距离_DP_C++_Java
    目录牛客_计算字符串的编辑距离_DP题目解析C++代码Java代码牛客_计算字符串的编辑距离_DP计算字符串的编辑距离_牛客题霸_牛客网描述:Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换......
  • 每日
    includeusingnamespacestd;intmain(){intm,n,num;cin>>m>>n;intarr[999999];ints[999999];for(inti=0;i<m;i++){cin>>arr[i];}for(inti=0;i<n;i++){cin>>num;intst=0;in......
  • 每日小题--买股票的最佳时机
    目录题目  分析解题思路完整代码题目 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返......