2017-01-25 1 views
1

프로그래밍 언어를 설계하고 있는데 추가하고자하는 기능은 trampoline functionclass 사이의 십자가입니다. 즉, generic class과 비슷한 리터럴을 취하는 클래스는 type입니다. 나는 언어로 그들을 만나지 않았기 때문에 나는 이것들의 이름에 붙어있다. 이미이 개념이나 가까운 것을 의미하는 것이 있는가? trampoline class을 사용하는 것은 옵션이지만, 더 정확하게 설명하거나 이미 다른 언어로 사용중인 것이 있다면 설명서에 필요한 특수 용어를 줄이기 위해 사용하는 것이 좋습니다.트램펄린 클래스의 이름이 있습니까?

class Point<const int n> { 
    private float[n] _value; 
    Point() { 
     for (int i = 0; i < n; i++) { 
      this._value[i] = 0f; 
     } 
    } 
    Point(Point<o> other) { 
     for (int i = 0; i < min(n, o); i++) { 
      this._value[i] = 0f; 
     } 
    } 
    public static float operator [index] (optional float value = null) { 
     if (value != null) { this._value[index] = value; } 
     return (this._value[index]); 
    } 
    public static Point<max(o, p)> operator + (Point<const int o> p1, Point<const int p> p2) { 
     Point<min(o, p)> small = (p1.n < p2.n ? p1 : p2); 
     Point<min(o, p)> large = (p1.n < p2.n ? p2 : p1); 
     Point<max(o, p)> ret = new Point<max(o, p)>(large); 
     for (int i = 0; i < min(o, p); i++) { ret[i] += small[i] } 
     return (ret); 
    } 
} 

답변

1

당신이 찾고있는 기간은 dependent types입니다 :

의사 코드는 위에서 명확하지 않습니다 경우에이 원리를 설명하기 위해 다음과 같습니다. 이는 유형이 유형 매개 변수 (제네릭과 같음)를 가질 수는 없지만 유형도 임의의 값 (종속 유형 매개 변수)으로 매개 변수화 될 수 있음을 의미합니다. 예를 들어 숫자 n을 사용하고 길이가 n 인 배열의 결과를 반환하는 함수의 시그니처를 정의 할 수 있습니다.

슬프게도 의존형 검사는 일반적으로 결정할 수 없습니다. 유형 검사 자체가 실행되는 동안 종속 유형 매개 변수 의 가능한 값 범위를 계산해야하므로입니다. 실제로 프로그램을 타이핑하기 위해서는 코드의 두 부분이 같은 범위의 가능한 값을 만들어 내는지 확인해야합니다. 이것은 신장 함수 평등으로 알려져 있으며 일반적으로 결정 불가능한 것으로 알려진 부분입니다.

이제 컴파일 타임 상수 만 종속 형식 매개 변수로 사용되는 경우 종속 형식 검사가 결정될 수 있습니다. 그러나 나는 그것에 대해 확신하지 못한다.


아래의 설명에서 종속 유형 매개 변수 인 것으로 보이는 부분은 유형 검사에 실제로 사용되지 않아야한다는 것을 알았습니다. 대신 암시 적 매개 변수로 볼 수 있습니다. 이것은 스칼라 프로그래밍 언어로 전달되는 암시 적 매개 변수와 유사합니다.

+0

고마워,하지만 구현 수준에 대한 개념과 비슷하지만 실제로는 이론이 아닌 '트램펄린 함수'에 대한 비교를 통해 여러 가지를 혼합했을 수도 있다고 생각한다. - 또는 max (o, p)'문을 의사 코드에 추가합니다. 실제로 max (o, p)를 허용하는 동적 비트는 여기서 생각하고있는 기능과 구별됩니다. 나는 타입이 아니고 유형 자체 인 일반적인 매개 변수로서 리터럴 또는 계산 된 값 (계산 된 값은이 문맥에서이 언어 내에서 리터럴로 볼 수 있음)을 전달하는 방법을 찾고 있습니다 (예 : int).) 정보에 대해 Upvoted. – CoryG

+1

질문을 명확히 할 수 있습니까? 나는 기본적으로 코드를보고 무엇을 요구하는지 짐작했다. 어쩌면 찾고있는 개념 만 포함하고 다른 특별한 개념은없는 코드 예제를 제공 할 수 있습니까? 또한 찾고있는 기능에 대한 자세한 설명을 추가하십시오. 그렇게 많이 추측 할 필요가 없습니다. 그런 다음 개념이 종속 유형과 다른 점을 설명하십시오. 나에게 위의 설명에서 나온 설명은 종속 유형과 정확하게 같습니다. –

+0

질문은 일반 정의에서 유형 대신 리터럴을 허용하는 일반 클래스의 이름입니다. 종속 형은 다른 형에 의존하거나 어떤 식 으로든 그것에 의해 제약을받는 값을 갖는 형이다. 이 경우에 기술 된 것의 이름은 반드시 일반적인 유형을 포함하지는 않습니다 (1, 2, 3, "a", "b"또는 "c"와 같은 리터럴은 컴파일 유형에서 로컬 상수로 효과적으로 전달됩니다 – CoryG

관련 문제