2017-11-28 中文编程语言之Z语言初尝试: ZLOGO 4
"中文编程"知乎专栏原文. 作者为本人.
@TKT2016 开发的Z语言(ZLOGO是它的一个部分)是本人至今看到的唯一一个仍活跃开发的开源且比较完整的中文编程语言项目. 它的源码在TKT2016/ZLanguage3.
此文从用户角度尝试一下ZLOGO的功能, 并记录一些过程中的发现.
首先上一个看完教程后自己写的螺旋方块演示. 源码附在最后.

以下是官网的说明:
LOGO语言创始于1968年,是美国国家科学基金会所资助的一项专案研究,在麻省理工学院(MIT)的人工智能研究室完成。
ZLOGO是基于Z语言实现LOGO语言功能的编程软件,用了中文易懂的语句代替原先LOGO语言难于记忆的命令,更方便学习者掌握。
官网上下载了ZLOGO4, 按照说明, 解压后就可运行.
按照ZLOGO4教程, 逐步实验.
第一个LOGO程序中, 有"左转60度". 推测默认方向是朝上, 测试了一下"左转0度", 的确如此. 推测"前进200"中的200指的是像素数. 觉得教程中最好说明这些基本的默认要素(包括画线的颜色, 粗细, 海龟行走速度等等).
在运行窗口打开的情况下, 再次"运行"会打开一个新的运行窗口.
代码缩进好像是不严格的. 即使每行开头没有缩进, 也照样运行(后补: 经进一步测试, 过程的第一行允许开头没有空白, 但之后的行不允许). 当然它可以使代码更可读.
在第二个"显示隐藏"程序中, 逗号用来分割两个语句:
前进50,隐藏
尝试把它分成两行:
前进50
隐藏
运行效果相同, 但发现两个问题:
- IDE里的Tab不等同于多个空格(5-6个空格之间)
- 如果"隐藏"之前没有空格, 就会弹出"编译信息"窗口并报错:
第4行,第3列错误:
不正确,应该是:
另外, 如果海龟越出了窗口, 比如"前进"太多, 好像运行窗口不能滚动, 或者最大化.
计算功能初步尝试一些合法表达式没有问题. 不过狠了一把试了"前进(2/0)", 好像就不显示了, 也没有报错.
最后的过程部分, 才看到"过程体每一行程序必须以空格开头,使程序的开始列必须大于过程名的列号。"这就解释了上面的报错. 建议将这个警示提到文档开头, 而且反馈信息最好明确一些.
学完教程之后, 试着参照p5js的一个演示程序, 写了个简单的方块螺旋效果图, 当然ZLOGO和p5js不是同类工具, 这里只是参考算法而已.
最大的感触当然是过程没有参数的痛苦, 原本螺旋演示里只要定义一个过程就可以了. 暂时没有在教程中看到这一功能. 如果已经支持, 期待原作者指正.
小结:
虽然距离实用尚有一点距离(本身也是测试版), 但瑕不掩瑜, 已有雏形. 除了过程参数之外, LOGO的经典功能已经具备. 非常期待改进版~~
附上"螺旋.zlogo"源码:
说明:画螺旋 开始绘图:
画正方形5
画正方形4
画正方形3
画正方形2
画正方形1 画正方形1:
设置画笔颜色为白色
左转(20/2)度,前进(20/2),左转90度
设置画笔颜色为红色
前进(20/2),左转90度
前进20,左转90度
前进20,左转90度
前进20,左转90度
前进(20/2)
复位 画正方形2:
设置画笔颜色为白色
左转(20*2/2)度,前进(20*2/2),左转90度
设置画笔颜色为红色
前进(20*2/2),左转90度
前进(20*2),左转90度
前进(20*2),左转90度
前进(20*2),左转90度
前进(20*2/2)
复位 画正方形3:
设置画笔颜色为白色
左转(20*3/2)度,前进(20*3/2),左转90度
设置画笔颜色为红色
前进(20*3/2),左转90度
前进(20*3),左转90度
前进(20*3),左转90度
前进(20*3),左转90度
前进(20*3/2)
复位 画正方形4:
设置画笔颜色为白色
左转(20*4/2)度,前进(20*4/2),左转90度
设置画笔颜色为红色
前进(20*4/2),左转90度
前进(20*4),左转90度
前进(20*4),左转90度
前进(20*4),左转90度
前进(20*4/2)
复位 画正方形5:
设置画笔颜色为白色
左转(20*5/2)度,前进(20*5/2),左转90度
设置画笔颜色为红色
前进(20*5/2),左转90度
前进(20*5),左转90度
前进(20*5),左转90度
前进(20*5),左转90度
前进(20*5/2)
复位
2017-11-28 中文编程语言之Z语言初尝试: ZLOGO 4的更多相关文章
- 中文编程语言之Z语言初尝试: ZLOGO 4
原文: https://zhuanlan.zhihu.com/p/31505895. 作者为本人. @TKT2016 开发的Z语言(ZLOGO是它的一个部分)是本人至今看到的唯一一个仍活跃开发的开源且 ...
- Spring @Scheduled @Async联合实现调度任务(2017.11.28更新)
定时任务之前一直用的是quartz之类,但是注意到Spring中其实也提供了一种简单的调度注释@Scheduled,也就想尝一下鲜.. 代码示意如下: @Component @EnableSchedu ...
- 2017.11.28 Enginering management:problem-solving ability
Today,my colleague is on bussiness trip. going to customer factory in jiangxi. slove the color diffe ...
- TKT中文编程语言简介
TKT中文编程语言简介 TKT语言是新型的类似自然语言的汉语编程语言. 它是基于新的语言设计思想创造的语言,和现存的易语言.习语言.O语言.汉编等中文编程语言没有关系. TKT语言特点一: 中文编程 ...
- 第十周 11.28 psp0
课堂测试总结 学生:马小心 日期:2017.11.28 作业号 日期 过程 估计数据 实际数据 累计数据 时间 ...
- 中文编程语言Z语言开源正式开源!!!
(Z语言基于.NET环境,源码中有很多高技术的代码,让更多的人知道对大家有会有很好的帮助,请管理员一点要批准放在首页) 本人实现的中文编程语言Z语言现在正式开源,采用LGPL协议. 编译器核心的网址为 ...
- jingchi.ai 2017.11.25-26 Onsite面试
时间:2017.11.25 - 11.26 地点:安徽安庆 来回路费报销,住宿报销. day1: 大哥哥问了我一个实际中他们遇到的问题.有n个点,将点进行分块输出,输出各个块的均值点.具体就是100* ...
- 2017/11/5 Leetcode 日记
2017/11/5 Leetcode 日记 476. Number Complement Given a positive integer, output its complement number. ...
- [BZOJ5109][LOJ #6252][P4061][CodePlus 2017 11月赛]大吉大利,今晚吃鸡!(最短路+拓扑排序+传递闭包+map+bitset(hash+压位))
5109: [CodePlus 2017]大吉大利,晚上吃鸡! Time Limit: 30 Sec Memory Limit: 1024 MBSubmit: 107 Solved: 57[Sub ...
随机推荐
- SpringCache学习实践
1. SpringCache学习实践 1.1. 引用 <dependency> <groupId>org.springframework.boot</groupId> ...
- jQuery实现遮罩层
1.1 背景半透明遮罩层样式 需要一个黑色(当然也可以其他)背景,且须设置为绝对定位,以下是项目中用到的css样式: /* 半透明的遮罩层 */ #overlay { background: #000 ...
- android WebView详解,常见漏洞详解和安全源码
这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 转载请注明出处:http://blog.csdn.net/se ...
- Vue-router导航问题
现在的项目,用的是Vue,但当时用的时候,是边学边做的,上手确实比较简单,但是已经用Vue写了一个项目了,但是感觉对Vue的还是不是很深刻,用的都是比较简单的API, 现在回头看看,有些东西,非常的精 ...
- Android--UI之Gallery
前言 这篇博客讲解一下Android开发中,Gallery控件的使用,这是一个画廊视图,用于展示一组图片,用固定在中间位置的水平滚动列表显示列表项的视图.Android最新的API文档中了解到,在An ...
- 通过Calendar简单解析Date日期,获取年、月、日、星期的数值
有时候项目中需要用到Date的年.月.日.星期的数值.那么解析方法如下: /**解析日期,获取年月日星期*/ private void parseDateToYearMonthDayWeek(Date ...
- 如何正确且高效实现OSSIM中文化的解决方案(图文详解)
前言 对于玩OSSIM的初学者或者中级水平的从业人员来说,都有一定必要性从中文看起,当然,最终还是英文的目标迈进,只是说,为了让自己更快速上手! 虽然系统说明支持中文,实际上,只是台湾的繁体中文而 ...
- 函数式编程之-定义能够支持Partial application的函数
是时候介绍如何在F#中定义函数了,在你没有接触过函数式编程语言之前,你也许会觉得C#/Java的语法已经够丰富了,有什么任务做不了呢?当你读过函数式编程之Currying和函数式编程之Partial ...
- find命令高级参数
find 命令参数大全 转自[https://www.cnblogs.com/yorkyang/p/6294894.html] Linux中find常见用法示例 ·find path -op ...
- MySQL之实现Oracle中的rank()函数的功能
假设表格为student, 数据如下: 我们要在MySQL中实现Oracle中的rank()函数功能,即组内排序,具体来说: 就是对student表中按照课程(course)对学生(name) ...