Butterfly 언어에서는 항과 상수를 정의한다 - 대문자로 시작해야 한다.
0항 함수는 상수이므로 상수라는 개념을 확장시켜 함수를 포함하게끔 하자.
상수 정의는 키워드 "Constant" 또는 "constant"로 시작하며 전자와 후자는 각각 extern과 static에 대응한다.
뒤에는 템플릿 인자가 붙는다. 즉,
Constant[t:*] Plus : t -> t -> t.
라는 코드는 다음 C++ 코드에 대응한다. 변수의 이름에는 대문자가 들어가면 안 된다.
여기서 "t:*"은 t를 타입변수로 쓰겠다는 것을 의미한다.
template <typename t> t Plus(t, t);
한편 템플릿 인자를 명시적으로 주고 싶을 때는 "-"를 이용하면 된다. 예를 들면,
Constant[size:Nat] Int-size : *.
이렇게 쓰면 타입 상수 템플릿 Int가 선언된다. Int-4는 타입 상수 Int*4의 다른 표현이다.
Plus 0 0
에서 Plus*(Int*4)가 호출된다.
템플릿을 아예 안 쓰면 "Constant"로, 템플릿 인자가 2개이면 "Constant[][]"로 하면 된다.
항 선언은 "Term" 또는 "term"이 키워드인 것만 빼면 상수 선언과 다를 바가 없다.
정의: 항은 구문론적 등호를 통해 정의한다. 상수는 풀네임을 적고 그 밑에 소거 관계를 써 정의한다.
나도 내 언어 항상 망상중
ㅋㅋㅋㅋㅋ