scip习题(1) scheme和c实现的对比

习题1.3

Define a procedure thats three numbers as argument and return the sum of the square of two large number.

scheme实现

(define (square x)
  (* x x))
(define (sum_of_square x y)
  (+ (square x)
     (square y)))
(define (bigger x y)
  (if (> x y)
      x
      y))
(define (smaller x y)
  (if (< x y)
      x
      y))
(define (sum_square x y z)
  (sum_of_square (bigger x y)
                 (bigger (smaller x y) z)))

c语言实现

//用C语言实现scip(计算机程序构造与解释)的一些习题。对比并进一步了解scheme的函数式思想
//Define a procedure thats three numbers as argument and return the sum of the square of two large
//numbers.
//C language implementation

#include "stdafx.h"
#include<iostream>
using namespace std;

int square(int x);
int sum_of_square(int a, int b);
int bigger_num(int a, int b);
int two_more_bigger_sum_of_square(int a, int b, int c);
int smaller_num(int a, int b);

//check the code
int main()
{
    cout<<two_more_bigger_sum_of_square(1,2,3);
    return 0;
}
int square(int x) {
    return x*x;
}

//retun the sum of the num of square
int sum_of_square(int a, int b) {
    return square(a)+square(b);

}

//return the bigger num
int bigger_num(int a, int b) {
    if (a > b)
        return a;
    else
        return b;
}

//takes the two num as agrument and return the smaller num
int smaller_num(int a, int b) { //return the bigger num
    if (a > b)
        return b;
    else
        return a;
}
时间: 2024-11-09 10:49:41

scip习题(1) scheme和c实现的对比的相关文章

SCIP习题 1.4

(define (a-plus-abs-b a b) (if (> b 0) (+ a b) (- a b)) )(define (a-plus-abs-b-book a b) ((if (> b 0) + -) a b) )(a-plus-abs-b 1 -1)(a-plus-abs-b-book 1 -1) if语句返回运算符,这也太灵活了.

SCIP习题 1.21(寻找最小因子)

(define (smallest-divisor n) (find-divisor n 2)) (define (find-divisor n test-divisor) (cond ((> (square test-divisor) n) n) ((divides? n test-divisor) test-divisor) (else (find-divisor n (+ test-divisor 1))))) (define (divides? a b) (= (remainder a

scheme 符号求导程序

SICP 习题: #lang scheme ( define ( variable? x ) ( symbol? x ) ) ( define ( same-variable? x y ) ( and ( variable? x ) ( variable? y ) ( eq? x y ) ) ) ( define ( =number? exp num ) ( and ( number? exp ) ( = exp num ) ) ) ;;;;;;;;;;;;;;;;; sum ;;;;;;;;;

Python 函数习题

#encoding=utf-8 from urllib.request import urlopen import random import os ''' 1. 定义一个fuc(url, folder_path) 获取url地址的内容,保存到folder_path的文件目录下,并随机生成一个文件名. ''' def save_url_content(url,folder_path=None): if not (url.startswith('http://') or url.startswit

SICP 习题 (2.23)解题总结:for-each的实现

SICP 习题 2.23 要求我们实现一个for-each过程. for-each过程和map过程其实很像,只不过for-each过程不返回值,如果返回一个值的话也是不包含意义的值. map比较像一个加工厂,进去一堆东西,加工一下,出来另一堆东西. for-each更像一个蒸汽机,进去一堆煤,燃烧一下,产生能量干点活,不出来东西,真的一定要说有东西出来也是煤渣,大家不在乎的东西. 所以for-each更关注的是里面执行的操作. 其实for-each操作在我们日常使用的语言中都会有,如c语言里的f

SICP 习题 (2.3) 解题总结

SICP 习题 2.3 要求我们实现一种平面矩形的表示,定义获取数据的相关选择函数.然后定义几个过程来计算矩形的周长和面积. 接着题目还要求我们实现矩形的另一种表示方式,要求这个新的矩形表示方式同样适用于以上定义的周长和面积计算过程. 有关这道题我们可以通过由上而下的方式进行实现,实现过程也不算复杂,原因是这道题涉及到的数学概念还是比较简单,就是矩形的面积和周长,差不多是我们小学的知识吧.不过题目后面要求我们实现矩形的不同表示方式,还要同时支持同一个计算周长和面积的过程,这点有些麻烦,实际上这道

SICP 习题 (2.1) 解题总结

SICP 习题 2.1 要求我们做一个可以正确处理正数和负数的make-rat过程,用于生成一个有理数.条件是分母必须是正数. 完成这道题本身比较简单,就是简单修改一下书中的make-rat过程就可以了. 书中原本的make-rat过程如下: (define (make-rat n d) (cons n d)) 可以发现,原来的make-rat就是简单地将n和d组成一个序对,然后返回这个序对,并没有对分子和分母进行判断. 我们要做的就是修改make-rat过程,判断一下分母d是不是小于0,如果分

SICP 习题 (2.20)解题总结: 不确定数量参数

SICP 习题 2.20 引入了一种新的函数调用方式,就是带 . 符号的不确定参数调用方式. 题中也讲到了, Scheme支持这种调用方式,如果我们把方法定义成下面这个样子 (define (my-method first-p . others-p) ;-.. ) 我们就可以在调用方法my-method时传入大于2的任何数量的参数,比如: (my-method 1 2 3 4 5 6) 这时my-method获得两个变量,first-p是1,而others-p是一个list,成员有2 3 4 5

SICP 习题 (2.24)解题总结:列表的结构

SICP 习题 2.24 是列表的巩固题,让我们更清晰的理解列表. 题目要求我们求如下表达式的值: (list 1 (list 2 (list 3 4))) 因为我是一个程序员,这种事我不会自己求值的,我会让计算机完成.... 在Scheme环境里运行以上表达式得到的结果是: (1 (2 (3 4))) 这个结果并不意外,相对有经验的程序员大概可以猜出来. 题目后来还要求画一个盒子指针结构将以上数据解释成一棵树. 手上没有方便的画图工具,于是用keynote直接画了一个盒子指针图,发现画起来还挺