【发布时间】:2017-10-15 20:30:11
【问题描述】:
好的,所以我定义了 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? 和 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。
【问题讨论】:
-
请不要破坏您的帖子。一旦您发布了一个问题,它就属于整个 Stack Overflow 社区(在 CC-by-SA 许可下)。如果您想取消此帖子与您帐户的关联,请参阅What is the proper route for a disassociation request?