# bookexamples **Repository Path**: juliaprog/bookexamples ## Basic Information - **Project Name**: bookexamples - **Description**: 《Julia语言程序设计》书中的实例源码 - **Primary Language**: Julia - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 28 - **Forks**: 15 - **Created**: 2018-08-01 - **Last Updated**: 2024-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 《Julia语言程序设计》示例代码 ## 项目介绍 《Julia语言程序设计》书中的实例源码 ## 环境说明 * 版本 Julia v1.0 * Julia官方下载地址:https://julialang.org/downloads/ 下载完成后,最好配置好环境变量,以便在系统自带的控制台中能够直接执行`Julia`命令。 ## 执行方式 有两种,选择其一。 * 在Windows的cmd或Linux/Mac的Shell中执行 `julia ` * 在开启的Julia的REPL中,执行`include(jl脚本的路径)` ## 作者联系方式 * 邮箱: juliaprog@163.com * 本书代码: gitee.com/juliaprog * 作者QQ号码:2642310145 * 读者群QQ号:946171484 * 博客:https://blog.csdn.net/conkty ## 本书勘误 #### 1. 正文第9页,REPL的退出,应使用`exit()`命令,而不是`quit()` * 上下文:“当然,在学习或使用告一段落后,可在REPL中按下CTRL+D(^D)或者在提示符后输入quit()并回车,便会退出该环境,同时对话窗口会关闭。” * 感谢反馈者:Julia中文社区的 __豆奶__ #### 2. 在讲述DateTime的一章中,关于`Time`,示例语句与执行结果不一致。给的是`Time(1)`,结果得到`00:00:00`。 * 前文为:“创建 Time 对象类似于创建 DateTime 对象,只需逐一填入参数即可” * 感谢反馈者:Julia与科学计算 https://mp.weixin.qq.com/s/TxSBhqm9yD3jtNvB9lWWOg #### 3. 在DateTime章,“访问”一节中,`Date`的对象`d`,获得其类型时,书中给的是`Base.Dates.Year`,“Julia与科学计算”认为应该是`Year`。 * 前文“如果要获得 Period 类型的周期值对象,可使用相应函数的首字母大写版,代码如下” * 说明:这并不能说是一个错误,与代码使用`Dates`的方式有关。 * 感谢反馈者:Julia与科学计算 https://mp.weixin.qq.com/s/TxSBhqm9yD3jtNvB9lWWOg #### 4. 在DateTime章,“访问”一节中,执行dump(d)之后,执行的`t.instant`,有误;而应该是`d.instant`。 * 前文“甚至,也可以直接访问内部结构中的成员变量值” * 感谢反馈者:Julia与科学计算 https://mp.weixin.qq.com/s/TxSBhqm9yD3jtNvB9lWWOg #### 5. 在DateTime章,“周期舍入”一节中,在生成`rtms`对象时,语句执行不通,应为`rtms = [round(DateTime(x, fmt), Second(1)) for x in tms]`。 * 前文“能够按照指定的周期对给定的时间进行转换,将其对齐到指定周期的时间框架中。我们仍以上述的时间序列为例,为了方便,将时间放入一个数集中” * 感谢反馈者:Julia与科学计算 https://mp.weixin.qq.com/s/TxSBhqm9yD3jtNvB9lWWOg #### 6. 在4.1节算术运算符中,示例代码的`x = Int64(12)` 然后计算`x / 2`得到的却是`6.5`,有误,前面一句应改为`x = Int64(13)` * 前文“不过,在除法运算符中,斜杠的除号/与数学除号÷在对整数进行计算时,表现有着显著的差异” * 感谢反馈者:Julia中文社区 __Da cainiao__ #### 7. 在8.8.4节自定义定位中,正文第204页,对`s = (1,1,2,3,2,4,1)`执行第二个findall时,代码应为`findall(in(2),s)`,而不是`findall(in(1),s)`。 * 前文“该方法的第一个参数相当于匿名函数......” * 感谢反馈者:Julia中文社区 __Da cainiao__ #### 8. 在数组一章,使用`UniformScaling`前,应提示`using LinearAlgebra`。 * 感谢反馈者:Julia中文社区 __Da cainiao__ #### 9. 在2.2节,第21页,“所以通常IO操作是最为耗时的部分”语句顺序有问题,应该为“所以IO(Input/Output,输入输出)操作通常是最为耗时的部分。”。 * 感谢反馈者:Julia语言程序设计读者群 __cherichy__ #### 10. 在13.1.1节,第296页,第三自然段中,语句“如果运算符不仅有一个字符”应修改为“如果运算符有多个字符”。 * 感谢反馈者:Julia语言程序设计读者群 __Da cainiao__ #### 11. 在13.2节,第299页,“脚本包含”一节中,示例脚本中的`display`函数名因与内置函数重名,修改为`mydisplay`。 * 感谢反馈者:Julia语言程序设计读者群 __Da cainiao__ #### 12. 在13.2节,第299页,“脚本包含”一节中,示例脚本part1.jl中的内容不应该是`A = rand(3,3)`而应该是`A = [1 2; 3 4; 5 6]`。 * 感谢反馈者:Julia语言程序设计读者群 __Da cainiao__ #### 13. 在16.2.2节,第375页,“定义小而精的函数”一节中,“有着目前的作用域边界”应该修改为“有着明确的作用域边界”。 * 感谢反馈者:Julia语言程序设计读者群 __Da cainiao__ #### 14. 在16.2.2节,第375页,示例代码中的`norm`函数与内置函数重名,修改为`mynorm`,示例代码中共有三处需要修改。 * 感谢反馈者:Julia语言程序设计读者群 __Da cainiao__ #### 15. 在11章,第255页及第256页,示例代码首先应`using Dates`或者`import Dates`,最好能在示例代码中明确给出。 * 感谢反馈者:Julia语言程序设计读者群 __豆奶__ #### 16. 在3.3.3节,第35页,第三段“内置的nextfloat()与prefloat()函数可以分别获得某个浮点值的后继与前继浮点值。”,其中的`prefloat`应该修改为`prevfloat`,却了个字符`v`。 * 感谢反馈者:Julia语言程序设计读者群 __幻华__ #### 17. 在介绍Channel的一章,脚本`demo_mconsumer.jl`中,应在`n = n - 1`中增加`global`标识: ```julia @elapsed while n > 0 # 打印消费者执行后的结果 job_id, exec_time = take!(results) # 从结果通道中提取数据 println("$job_id finished in $(round(exec_time, digits=2)) seconds") global n = n - 1 # 原书无 global,但 v1.0 后需要显式使用 global end ``` * 感谢反馈者:Julia语言程序设计读者群 __永遠の➹思い出__ #### 18. 在1.4节,第11页,文字“另外,Julia内置了大量的函数或常量。如果名称与它们相同,虽然语法规则上是允许的,但不会成功。”,描述不准确,不是不能成功而是在使用过后不能成功,如果在使用前就重载了是能成功的。这种规定有点不明所以,具体该句如何修改,待定。 * 感谢反馈者:Julia语言程序设计读者群 __幻华__ #### 19. 在6.7节,第97页,示例代码`Union{} <: TypeVar(:T) <: Any`无法执行成功,这是因为该句在`v0.6`中成功,但在适配`1.0`版时,没有及时更新掉。 * 前文“如果在构造时,其中的参数lb与ub省略,则表示不限定类型的上下界,此时这两个参数分别默认为Any和Union{},即” * 感谢反馈者:Julia语言程序设计读者群 __幻华__ #### 20. 在6.3节,第82页,示例代码`subtypes(Signed)`执行的结果应该为: ```julia julia> subtypes(Signed) 6-element Array{Any,1}: BigInt Int128 Int16 Int32 Int64 Int8 ``` 类型发生了变化,而且成员内容中多了个`BigInt`。 * 前文“也可以时候用subtypes()获得某个类型的子类型列表,例如:” * 感谢反馈者:Julia语言程序设计读者群 __幻华__ #### 21. 书中52页开头,对"m=50"取反后应该为-51而非-50(示例代码中给出的也是-50) * 感谢反馈者:__ZhangYue__ #### 22. 书中56页结尾,运行代码"a>c" (# Int64(50)>Float32(2.5))结果应为true,而非书中给出的false * 感谢反馈者:__ZhangYue__ ## 致谢 * Julia中文社区 __千凡 - 数据分析__ * Julia中文社区 __Allphfa__ * Julia中文社区 __豆奶__ * Julia中文社区 __Da cainiao__ * Julia中文社区 __cherichy__ * Julia中文社区 __幻华__ * Julia语言程序设计读者群 __永遠の➹思い出__ * Julia语言程序设计读者群 __Zhangyue__ ## 其他建议 * Julia中文社区Allphfa: 模仿Pony教程的写法,更为简洁、直接:https://tutorial.ponylang.io/getting-started/what-you-need.html