在本页中:
2.6.1 数据定义
track
date
2.6.2 Export的函数
read-itunes-as-lists
read-itunes-as-tracks
create-track
create-date

2.6 iTunes: "itunes.rkt"

Matthias Felleisen
及Racket-zh项目组译

 (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集合中日期的表示。

实例记录六条信息:日期的yearmonth112之间, 包含两者)、day131之间)、 hour023之间)、 minute059之间)和second059之间)。

这里,我们引入以下数据定义:
; Tracktrack?
; Datedate?
 
; LTracks是以下之一:
;  '()
;  (cons Track LTracks)
 
; LLists是以下之一:
;  '()
;  (cons LAssoc LLists)
 
; LAssoc是以下之一:
;  '()
;  (cons Association LAssoc)
 
; Association(cons string? (cons BSDN '()))
 
; BSDN满足string?integer?real?Dateboolean?之一。

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

除此之外,本教学包还export TrackDate的谓词和所有选择函数: