在上一篇随笔中介绍了四种编程语言。这次再介绍四种编程语言:Fortran、Lua、Lisp 和 Logo。
Fortran
Fortran 语言在2010年6月编程语言排行榜中排名第三十一位。下面就是 GregorianTest.for 程序:
我没有在 Fortran 语言的标准库中找到设置指定日期的函数,只好从 1970-01-01 往回倒数 141,438 天得到 1582-10-04 。
安装 GNU Fortran 编译器,编译和运行:
运行结果和 C 语言一样。
Lua
Lua 语言在2010年6月编程语言排行榜中排名第十七位。下面就是 GregorianTest.lua 程序:
安装 Lua 软件包。luac 是编译器,用于将源程序编译为字节码,默认的文件名是 luac.out,luac –l 可以查看字节码。lua 可以作为交互窗口,也可以解释执行 lua 源程序,还可以用于运行编译后的字节码:
运行结果和 C 语言一样。
Lisp
Lisp 语言在2010年6月编程语言排行榜中排名第十六位。下面就是 GregorianTest.lisp 程序:
安装 GNU Common Lisp 软件包,gcl 可以作为交互窗口,也可编译源程序(使用 –compile 参数),还可以解释执行(使用 –f 参数):
运行结果基本和 C 语言一样,但是有一个 bug,认为 1582-10-04 是1583年1月的第 –88 天。这是一个很奇怪的 bug,其它大部分日期是正常的,如下所示:
此外,还可以选择安装 GNU CLISP 软件包,clisp 是符合 ANSI Common Lisp 标准的编译器、解释器和调试器:
可以看出,GNU CLISP 不支持 1900-01-01 以前的日期。
Logo
在2010年6月编程语言排行榜中排名第三十六位的 Logo 语言的原型来自 Lisp 语言,内置一套海龟绘图系统,很适合于儿童学习。下面是一个用海龟绘图的 mn_eck.logo 程序:
1: to n_eck :ne :sz
2: repeat :ne [rt 360 / :ne fd :sz]
3: end
4:
5: to mn_eck :ne :sz
6: repeat :ne [rt 360 / :ne n_eck :ne :sz]
7: end
8:
9: mn_eck 36 20
安装 UC Berkeley Logo 软件包,启动交互窗口:
运行结果如下所示:
我没有在 Logo 语言中找到有关日期方面的函数。如果有哪们朋友知道的话,请在评论中告诉我。谢谢!
总结
儒略历1582年10月4日星期四的下一天是格里历1582年10月15日星期五。能够正确处理的语言有:
- Java (使用 java.util.GregorianCalendar 类)
- Scala (使用 java.util.GregorianCalendar 类)
- Ruby (使用 Date 类)
- Visual Basic.NET (使用 System.Globalization.Calendar 相关的类,必须由用户自己指定使用儒略历还是格里历)
- C# (使用 System.Globalization.Calendar 相关的类,必须由用户自己指定使用儒略历还是格里历)
- F# (使用 System.Globalization.Calendar 相关的类,必须由用户自己指定使用儒略历还是格里历)
- PHP (使用 cal_to_jd 和 cal_from_jd 函数,必须由用户自己指定使用儒略历还是格里历)
把格里历外推到1582年10月15日之前,取代儒略历,从而认为1582年10月4日是星期一的语言有:
- Visual Basic.NET (使用 System.DateTime 类)
- C# (使用 System.DateTime 类)
- F# (使用 System.DateTime 类)
- C (GNU C 编译器,使用 tm 结构和 mktime 函数)
- C++ (使用 boost::gregorian::date 和 date_duration 类)
- Python (使用 date 和 timedelta 类)
- JavaScript (使用 Date 类)
- Perl (使用核心模块的 localtime 和 timelocal 函数,或者使用 DateTime 模块)
- Fortran (使用 ctime 函数,必须由用户自己从 1970-01-01 倒数 141,438 天得到 1582-10-04)
- Lua (使用 os.time 和 os.date 函数)
- Lisp (使用 GNU Common Lisp 软件包,使用 encode-universal-time 和 decode-universal 函数)
认为1582年10月有4日是星期二或者星期六(很奇怪的决定)的语言有:
- PHP (使用 DateTime 类)
- Delphi (使用 Free Pascal 编译器,使用 TTimeStamp 类型和 EnCodeDate、DateTimeToTimeStamp 函数)
标准库不支持1582年10月4日,或者无法计算某一日期是星期几的语言有:
- C (Microsoft Visual Studio 2010 的 C++ 编译器,使用 tm 结构和 mktime 函数)
- Pascal (使用 GNU Pascal 编译器,使用 TimeStamp 类型和 GetTimeStamp 函数)
- Lisp (使用 GNU CLISP 软件包,使用 encode-universal-time 和 decode-universal 函数)
- Logo (使用 UC Berkeley Logo 软件包,没有找到有关日期的函数)
参考资料
- GNU Fortran
- GNU Fortran: CTIME: Convert a time into a string
- The Programming Language Lua
- Programming in Lua: Date and Time
- Wikipedia: Lisp (programming language)
- The Common Lisp Cookbook – Dates and Times
- Wikipedia: Logo (programming language)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2008-06-20 Timus 1011. Conductors