好的,所以我定义了 3 个列表:
(define mylist '((pause 5 5 5)(note 3 4 5)(pause 3 4 4)))
(define myseqlist '(sequential-music-element (note 5 5 5) (note 4 3 4) (note 5 3 4)))
(define myparlist '(parallel-music-element (note 5 2 5) (note 4 2 4) (note 5 3 1)))
我有谓词note?
and pause?
,本质上它检查列表是否以开头'note
或'pause
然后返回真或假。但是我可以有包含音符和暂停的列表,这被称为顺序音乐元素(见myseqlist
上文)或并行音乐元素(见myparlist
上文)
如何定义一个返回复音度数的函数,它将 4 个元素之一作为参数?(见下文我的尝试)
pause
复音度 = 0
note
复音度 = 1
序列音乐元素?返回度数最大的孩子的度数
平行音乐元素?返回孩子的度数之和
如何完成此功能:
(define (degree-of-polyphony elem)
(cond [(note? elem) 1]
[(pause? elem) 0]
[(sequential-music-element? elem) (argmax ??? )]))
在这种情况下,我不确定如何使用 argmax。它应该检查degree-of-polyphony
作为参数的整个元素列表的最高复音。
示例: (degree-of-polyphony myseqlist) 应该返回 1,因为它至少有一个音符,如果它全部暂停,它应该返回 0。