pmelody.gms : 순열이 있는 멜로디 라인과 코드에 대한 음표 선택

설명

세트의 모든 순열을 갖는 것이 편리할 수 있습니다.
Julius Davies가 작곡한 귀여운 애플리케이션이 하나 있습니다:

"
 내 고객 중 한 명은 음악 작곡가(앙드레 코미에)인데, 그는
 음표를 선택하는 데 도움이 되도록 순열 계산기를 작성해달라고 나에게 요청했습니다.
 멜로디 라인과 코드용.
"

이 모델에서는 명시적인 슬롯 구문을 사용하여 순열을 생성합니다.
숫자를 입력하고 유사한 출력을 생성합니다. 참고로 우리는 제거하지 않습니다
중복 순열.

키워드: 슬롯 언어 특징, 순열 생성, 음악 작곡

소형 모델 유형 :슬롯


카테고리 : 슬롯 모델 라이브러리


메인 파일 : pmelody.gms

$title 순열이 있는 멜로디 라인 및 코드에 대한 음표 선택 (PMELODY,SEQ=375)

$onText
세트의 모든 순열을 갖는 것이 편리할 수 있습니다.
Julius Davies가 작곡한 귀여운 애플리케이션이 하나 있습니다:

"
 내 고객 중 한 명은 음악 작곡가(앙드레 코미에)인데, 그는
 음표를 선택하는 데 도움이 되도록 순열 계산기를 작성해달라고 나에게 요청했습니다.
 멜로디 라인과 코드용.
"

이 모델에서는 명시적인 슬롯 구문을 사용하여 순열을 생성합니다.
숫자를 입력하고 유사한 출력을 생성합니다. 참고로 우리는 제거하지 않습니다
중복 순열.

키워드: 슬롯 언어 특징, 순열 생성, 음악 작곡
$offText

세트
   n '피치 클래스' / C, 'C#', D, 'D#', E, F, 'F#', G, 'G#', A, 'A#', B /
   ni(n) '초기 음표' / C /
   i '반음 점프' / i1*i4 /;

$eval pmax 사실(카드(i))

p '순열 지수' 설정 / p1*p%pmax% /;

매개변수
$onEps
   j(i) '실제 반음표 점프' / i1 1, i2 1, i3 0, i4 5 /
$offEps
   m(p,i) '점프 순열'
   mm(p,i) '누적 점프';

옵션 m > j;
mm(p,i) = 0;

loop(i, mm(p,i) = mm(p,i-1) + m(p,i));

np(p,i,n) 'i번째 점프에 대한 메모'를 설정합니다.
loop(ni(n), np(p,i,n + mm(p,i)) = yes);

옵션 np:1:1:1;
디스플레이 np;

파일 f / perm.txt /;
put f '* 반음 점프의 순열';
루프(p,
   넣어 / 'C';
   loop(np(p,i,n), put n.tl:3:0;);
   loop(i, m(p,i):2:0);
);