]]> ]]>

Pike

Реализация языка программирования Pike

Pike — авторская (и единственная) реализация языка, интерпретатор. Распространяется под рядом свободных лицензий (GNU GPL, GNU LGPL, MPL), позволяющих использовать его практически в любых целях.

Примеры:

Hello, World!:

Пример для версий Pike 7.6, Pike 7.8
int 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.8
int 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

]]>

Работа программистам