Prologue: How to Program

1. Arithmetic and Arithmetic

> (+ 1 2 3 4)
10
> (string-append "hello " "world")
"hello world"
> (string-length "hello world")
11
> (number->string 42)
"42"
> (string->number "42")
42
    Lisp中的bool是#true,#false
> (string->number "hello world")
false
> (and true false)
false
> (and #true #false)
false
> (not (or #true #false))
false
    它也支持算术运算:
> (> 10 9)
true
> (< 10 9)
false
> (>= 10 10)
true
> (string=? "hello" "world")
false
    甚至是复杂的运算:
(and (or (= (string-length "hello world") (string->number "11"))
         (string=? "hello world" "good morning"))
     (>= (+ (string-length "hello world") 60) 80))
    我们甚至可以操作图片(载入库2htdp/image):

备注:以下为截屏,因为代码中不允许有照片

    也可以自己创建一些图形(图形也只是数据的集合):

备注:第三个图形应该是红色圆在蓝色方块上面,但是不知道为什么没显示.

    而empty-scene生成一个栅格表,place-image将图片放入栅格表中:

备注:也不知道为什么栅格表无法显示

2. Inputs and Output

    Lisp中函数的语法如下:

(define (FunctionName InputName) BodyExpression)
    一个简单的实例(输出4):
(define (y x) (* x x))
(y 2)
    我们可以编写一个火箭升空的函数:

备注:

「费曼」技巧:将难点分而化之,切成小知识块,再逐个对付,之后通过向别人清楚地解说来检验自己是否真的理解。当然,依旧会有你解决不了的问题,这时候不要强迫自己——很多时候当你之后回过头来再看这个问题时,一切豁然开朗。

    这时,将引入一个操作:animate

1. animate开启一个时钟,并且计算时钟的滴答数

2. 时钟每秒滴答28次

3. 每滴答一次,animate都将当前的滴答数传递给函数作为参数

    所以:

(animate create-rocket-scene)
在一秒内的操作是:
(create-rocket-scene 0)
.
.
.
.
(create-rocket-scene 28)
    这就相当于我们在看一个动画:火箭的动画.

3. Many Ways To Compute

    Lisp中条件表达式语法如下:

(cond
  [ConditionExpression1 ResultExpression1]
  [ConditionExpression2 ResultExpression2]
  ....
  [ConditionExpressionN ResultExpressionN])
    如果ConditionExpression1为真,则返回ResultExpression1,否则继续测试ConditionExpression2,如果都为假,则产生一个错误:
(define (sign x)
  (cond
    [(> x 0) 1]
    [(= x 0) 0]))
(sign 10)
(sign -5)
(sign 0)
输出:
1
cond: all question results were false
>
    这时候,更新我们的火箭程序:

运行指令:

> (animate create-rocket-scene.v2)
    则可以看到火箭从上往下飞......


    但是火箭本身具有大小的,所以优化后的程序为:

4. One Program, Many Definitions

    Lisp中定义一个变量的语法如下:

(define Name Expression)
    所以,我们完全可以重写之前的火箭程序:

5. One More Definition

    但实际上火箭不可能以均匀的速度飞行的,这里我们引入了:d(t) = v * t - 1 / 2 * a * t * t的物理公式.则程序修改如下:

; properties of the "world"
(define WIDTH 100)
(define HEIGHT 1000)

;properties of the descending rocket
(define VELOCITY 20)
(define DECELERATION 1)

;various other constants
(define MTSCN (empty-scene WIDTH HEIGHT))

(define ROCKET '火箭的图形')
(define ROCKET-CENTER-TO-BOTTOM 
  (- HEIGHT (/ (image-height ROCKET) 2)))
(define X 50)

;functions
(define (create-rocket-scene.v6 t)
  (cond
    [(<= (distance t) ROCKET-CENTER-TO-BOTTOM)
     (place-image ROCKET X (distance t) MTSCN)]
    [(> (distance t) ROCKET-CENTER-TO-BOTTOM)
     (place-image ROCKET X ROCKET-CENTER-TO-BOTTOM MTSCN)]))
(define (distance t)
  (- (* VELOCITY t) (* 1/2 DECELERATION (sqrt t))))


转载于:https://my.oschina.net/voler/blog/399173

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值