forth 探究 之 找出最大值和最小值

        Forth可以很方便的在一组数字中找出最大值和最小值,与通常程序语言相比,用forth会很有意思!

       要找出一组数中的最大数和最小数,简单到python就一句:最大数 max([5,6,0,-1]),最小数 min([5,6,0,-1])。

        可问题看似解决了,就像python中的set去重一样,其实并没有弄懂。如同很多功能在标准库中拿来随便用用就可以了,事实上大脑却没有思考过具体的原理。不用max函数,怎么解决?  那就自己写算法,用python、java或是C,差不多都是这样一种思路:先设定一个初始值max=list[0],循环遍历列表从i=0一直到最后一项len(list),在循环中每一项i都同max进行比较,如果那一项大于max,max就等于此项,min也一样。最后循环结束得出该值,python算法如下:

    max, min = list[0], list[0]
    for i in list:
    if i > max or i < min:
        max = i; min = i
   print(max)

 到此也该满意了吧?不过forth却不这么认为,forth可以不用变量,不用if条件判断、不用数组。forth的思想是从顶层进行设计,从底层进行开发。

Forth的代码可写成这样:

: 3max  3dup max max >r min min r> ;

: n_max depth 2 - 0 do 3max loop ; 

5 6 0 -1   n_max 

运行gforth,显示:-1  6

思路:先编写3max,利用max系统单词求出三个数中的最小值和最大值,并返回最小值和最大值,再同栈中前一个数值进行三个数比较,以此推出整个栈中的最小值和最大值。

将if和for隐藏在forth单词里,与传统算法相比确实不同。forth的思想相对于传统算法而言看似不太好懂,但一旦理解就会感受到forth的巧妙和有趣之处。如同本题一样,把问题分解成最简单的一个个小问题,再组合起来解决完整的问题,先解决3个数中求最大值和最小值,再扩展延伸至更多的数值上去。

想赶在10月24日写一篇学习forth的学习体会,可还是晚了一天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值