我不明白"类型级编程"的含义,也无法使用Google找到合适的解释.
有人可以提供一个演示类型级编程的示例吗?范式的解释和/或定义将是有用的和受到赞赏的.
我对较低级别的概念很感兴趣,例如操作系统,算法,数学证明软件正确性等.
最吸引我的是编译器.我开始学习它们并希望为了学习而实现一个玩具编译器,也许它变得很大(你永远都不知道,对吧?).
我的目标是实现类似lua的静态类型,线程感知编程语言(第一个目标是具有基本堆栈操作的解释器).我的问题是,我对c,c ++或pascal等低级语言几乎没有兴趣,我想知道是否有可能在动态类型环境中为静态类型语言实现编译器?
我有兴趣在lua或python中实现这样的语言(虽然lua更适合我).
好吧,我有一个用户定义的类型命名fraction,它代表普通分数与分子和分母.这是代码:
class Fraction
{
private:
int numerator;
int denominator;
public:
Fraction(int numer,int denom)
:numerator(numer),denominator(denom){}
int get_denom(){return denominator;}
int get_numer(){return numerator;}
};
Run Code Online (Sandbox Code Playgroud)
如您所见,它在头文件中完全实现.
所以我想要做的就是使用排序算法对分数进行排序.这是重载"<"运算符的代码(注意:它与Fraction类放在同一个文件中,但在类之外):
bool operator<(Fraction& first,Fraction& second)
{
if(first.get_denom() == second.get_denom())
{
return first.get_numer()<second.get_numer()?true:false;
}
int first_num=first.get_denom();
int second_num=second.get_denom();
int lcm=(first_num*second_num)/gcd(first_num,second_num);
int first_new_numerator=(lcm/first_num)*first.get_numer();
int second_new_numerator=(lcm/second_num)*second.get_numer();
return first_new_numerator<second_new_numerator?true:false;
}
Run Code Online (Sandbox Code Playgroud)
它的作用是检查分母是否相等,如果它们是测试分子的值.如果它们不相等,则使用最小公倍数和gcd来均衡它们.
当我想在main(编译时错误)中使用排序算法时,真正的问题就开始了.这是主要的代码:
Fraction parse_fraction(string& input)
{
stringstream fraction_string(input);
int numer;
fraction_string>>numer;
char seperator;
fraction_string>>seperator;
int denom;
fraction_string>>denom;
return Fraction(numer,denom);
}
int main()
{
vector<Fraction> fractions;
string input;
while(cin>>input)
{
if(input=="|") …Run Code Online (Sandbox Code Playgroud)