2.6 iTunes: "itunes.rkt"
(require 2htdp/itunes) | package: htdp-lib |
itunes.rkt教学包实现并提供了读取从iTunes导出的曲目集合的功能。
在iTunes中,从File菜单中选择Library,然后选择Export Library。 这样做会将你的iTunes集合的描述导出为XML格式的文件。
2.6.1 数据定义
struct
(struct track (name artist album time track# added play# played) #:extra-constructor-name make-track) name : string? artist : string? album : string? time : natural-number/c track# : natural-number/c added : date? play# : natural-number/c played : date?
是iTunes集合中音乐曲目的表示。
实例记录该曲目的标题name、制作艺术家artist、属于专辑album、 播放time毫秒、位于音轨track#、添加日期added、 已经播放过play#次,最后播放时间为played。
struct
(struct date (year month day hour minute second) #:extra-constructor-name make-date) year : natural-number/c month : natural-number/c day : natural-number/c hour : natural-number/c minute : natural-number/c second : natural-number/c
是iTunes集合中日期的表示。
实例记录六条信息:日期的year、month(1到12之间, 包含两者)、day(1到31之间)、 hour(0到23之间)、 minute(0到59之间)和second(0到59之间)。
这里,我们引入以下数据定义:
; Track是track? ; Date是date? ; LTracks是以下之一: ; – '() ; – (cons Track LTracks) ; LLists是以下之一: ; – '() ; – (cons LAssoc LLists) ; LAssoc是以下之一: ; – '() ; – (cons Association LAssoc) ; Association是(cons string? (cons BSDN '())) ; BSDN满足string?、integer?、real?、Date或boolean?之一。
2.6.2 Export的函数
函数
(read-itunes-as-lists file-name) → LLists
file-name : string?
为file-name(从iTunes库中导出的XML)中所有的曲目创建表示(表的表)。
效果:从file-name中读取XML文档
例如:
(read-itunes-as-lists "Library.xml")
函数
(read-itunes-as-tracks file-name) → LTracks
file-name : string?
为file-name(从iTunes库导出的XML)中的所有曲目创建表示(曲目的表)。
效果:从file-name中读取XML文档
例如:
(read-itunes-as-tracks "Library.xml")
函数
(create-track name artist album time track# added play# played) → (or/c track? false?) name : string? artist : string? album : string? time : natural-number/c track# : natural-number/c added : date? play# : natural-number/c played : date?
如果输入符合对应的谓词,那么创建曲目的表示。否则返回#false。
注意:这是个带检查的构造函数。
> (create-track "one" "two" "three" 4 5 (create-date 1 2 3 4 5 6) 7 (create-date 1 2 3 4 5 6)) (track "one" "two" "three" 4 5 (date 1 2 3 4 5 6) 7 (date 1 2 3 4 5 6))
> (create-track "one" "two" "three" 4 5 "a date" 7 "another date") #f
函数
(create-date year month day hour minute second)
→ (or/c date? false?) year : natural-number/c month : natural-number/c day : natural-number/c hour : natural-number/c minute : natural-number/c second : natural-number/c
如果输入符合对应的谓词,那么创建日期的表示。否则返回#false。
注意:这是个带检查的构造函数。
> (create-date 1 2 3 4 5 6) (date 1 2 3 4 5 6)
> (create-date 1 2 3 "four" 5 6) #f