Pike
Реализация языка программирования PikePike — авторская (и единственная) реализация языка, интерпретатор. Распространяется под рядом свободных лицензий (GNU GPL, GNU LGPL, MPL), позволяющих использовать его практически в любых целях.
Ссылки:
Примеры:
Hello, World!:
Пример для версий Pike 7.6, Pike 7.8int main() {
write("Hello, World!\n");
return 0;
}
Числа Фибоначчи:
Пример для версий Pike 7.6, Pike 7.8Используется рекурсивное определение чисел Фибоначчи.
int fibonacci(int n) {
return ( n<=2 ? 1 : fibonacci(n-1) + fibonacci(n-2) );
}
int main() {
for (int n=1; n<=16; n++)
write(fibonacci(n)+", ");
write("...\n");
return 0;
}
Факториал:
Пример для версий Pike 7.6, Pike 7.8Используется рекурсивное определение факториала. Тип int
может содержать произвольно большие числа.
int factorial(int n) {
return ( n<=1 ? 1 : n * factorial(n-1) );
}
int main() {
for (int n=0; n<=16; n++)
write(n+"! = "+factorial(n)+"\n");
return 0;
}
Квадратное уравнение:
Пример для версий Pike 7.6, Pike 7.8int main() {
int A = (int)Stdio.stdin->gets();
if (A == 0) {
write("Not a quadratic equation.\n");
return 0;
}
int B = (int)Stdio.stdin->gets();
int C = (int)Stdio.stdin->gets();
int D = (B*B-4*A*C);
write(D+"\n");
if (D == 0)
write(sprintf("x = %f\n",-B/2.0/A));
else if (D > 0) {
write(sprintf("x1 = %f\n", (-B+sqrt(D))/2.0/A));
write(sprintf("x2 = %f\n", (-B-sqrt(D))/2.0/A));
}
else {
write(sprintf("x1 = (%f, %f)\n", -B/2.0/A, sqrt(-D)/2.0/A));
write(sprintf("x1 = (%f, %f)\n", -B/2.0/A, -sqrt(-D)/2.0/A));
}
return 0;
}
CamelCase:
Пример для версий Pike 7.6, Pike 7.8Эта программа обрабатывает введенную строку посимвольно. Единственный нюанс — в системе типов Pike отсутствует тип “символ”, поэтому text[i]
— не строка, а число — ASCII-код символа. Чтобы получить строку, нужно использовать text[i..i]
— операцию извлечения подстроки.
int main() {
string text = lower_case(Stdio.stdin->gets()), cc = "";
int i, lastSpace = 1;
for (i=0; i<strlen(text); i++) {
if (text[i] >= 'a' && text[i] <= 'z') {
if (lastSpace == 1)
cc += upper_case(text[i..i]);
else
cc += text[i..i];
lastSpace = 0;
}
else
lastSpace = 1;
}
write(cc+"\n");
return 0;
}
Комментарии
]]>blog comments powered by Disqus
]]>