使用 argmax 查找元素列表中的最大数
Using argmax to find largest number in a list of elements
好的,我定义了 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
开头,然后 return 是真还是假.
但是我可以有包含音符和停顿的列表,称为 sequential-music-element(见上文 myseqlist
)或 parallel-music-element(见上文 myparlist
)
如何定义一个 return 复音度的函数,将 4 个元素之一作为参数? (见下文我的尝试)
pause
复音度 = 0
note
复音度 = 1
sequence-music-element? returnchild的度数最大
parallel-music-element? returnchild仁
度数之和
如何完成这个功能:
(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) 应该 return 1 因为它至少有一个音符,如果它全部停顿,它应该 return 0。
如果你只需要检查列表中是否有至少一个note
,我会这样做:
(define (note? ele)
(and (pair? ele)
(eq? (car ele) 'note)))
(define (degree-of-polyphony elem)
(cond [(note? elem) 1]
[(pause? elem) 0]
[(sequential-music-element? elem)
(if (ormap note? elem) 1 0)]))
ormap
检查是否至少有一个元素满足给定条件,如果我们需要找到最大值,argmax
会很有用。
好的,我定义了 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
开头,然后 return 是真还是假.
但是我可以有包含音符和停顿的列表,称为 sequential-music-element(见上文 myseqlist
)或 parallel-music-element(见上文 myparlist
)
如何定义一个 return 复音度的函数,将 4 个元素之一作为参数? (见下文我的尝试)
pause
复音度 = 0
note
复音度 = 1
sequence-music-element? returnchild的度数最大
parallel-music-element? returnchild仁
度数之和如何完成这个功能:
(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) 应该 return 1 因为它至少有一个音符,如果它全部停顿,它应该 return 0。
如果你只需要检查列表中是否有至少一个note
,我会这样做:
(define (note? ele)
(and (pair? ele)
(eq? (car ele) 'note)))
(define (degree-of-polyphony elem)
(cond [(note? elem) 1]
[(pause? elem) 0]
[(sequential-music-element? elem)
(if (ormap note? elem) 1 0)]))
ormap
检查是否至少有一个元素满足给定条件,如果我们需要找到最大值,argmax
会很有用。