Форум программистов, компьютерный форум, киберфорум
Наши страницы
Другие языки программирования
Войти
Регистрация
Восстановить пароль
 
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
#1

Как устроены "внутри себя" условия и циклы в языке Forth

05.10.2015, 15:00. Просмотров 302. Ответов 1
Метки нет (Все метки)

Допустим, я хочу перевести программу с Форта на Джаву. Конечно, можно понять ее смысл и реализовать тот же алгоритм на Джаве, но я решил сделать по-другому (главным образом "фо фан", если честно). Примерно так:

Java
import java.util.Stack;
import java.util.Scanner;
 
class Forth {
 
    Stack<Integer> stack = new Stack<Integer>();
 
    public Forth push(int n) {
        stack.push(n);
        return this;
    }
 
    public Forth dup() {
        stack.push(stack.peek());
        return this;
    }
 
    public Forth plus() {
        stack.push(stack.pop() + stack.pop());
        return this;
    }
 
    public Forth mul() {
        stack.push(stack.pop() * stack.pop());
        return this;
    }
 
    public Forth swap() {
        Integer a = stack.pop();
        Integer b = stack.pop();
        stack.push(a);
        stack.push(b);
        return this;
    }
 
    public int pop() {
        return stack.pop();
    }
}
 
class Solution {
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            scanner.nextLine();
            System.out.print("(a + b)^2 = ");
            System.out.println(new Forth().push(a).push(b).plus().dup().mul().pop());
            System.out.print("a^2 + b^2 = ");
            System.out.println(new Forth().push(a).push(b).dup().mul().swap().dup().mul().plus().pop());
        }
        scanner.close();
    }
}
Вопрос: а как реализовать в таком же стиле алгоритм, где есть условные конструкции и/или циклы? Например, вычисление наибольшего общего кратного на Форте

Код
: gcd ( a b -- n )
  begin dup while tuck mod repeat drop ;
Соответственно, у меня должно быть что-то вроде

Java
new Forth().push(a).push(b).begin().dup().while().tuck().mod().repeat().drop().pop();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2015, 15:00
Ответы с готовыми решениями:

[КуМир] Ввести символьную строку и заменить все буквы "а" на "б" и наоборот (как заглавные так и строчные)
ввести символьную строку и заменить все буквы а на буквы б и наоборот как...

[Ada] Создать динамический массив, тип которого опеределяется, как "Запись с динамическим массивом"
Я программирую на языке ada. Передо мной возникла задача создать динамический...

Выяснить, имеется ли в последовательности пара соседних букв "th" или "ch"
Дана последовательность из N символов. Выяснить, имеется ли пара соседних букв...

Как "расширить" тип integer
Возникла проблема. Во время выполнения программы вылезает ошибка: Fortran...

как работают команды "String", "Unstring", "Pointer" с большими переменными
Привет. Я начинающий программист в Cobol. У меня такой вопрос: мне нужно...

1
Catstail
Модератор
23575 / 11676 / 2043
Регистрация: 12.02.2012
Сообщений: 19,049
10.10.2015, 15:30 #2
Рекомендую заглянуть в книгу "Язык Форт и его реализация". Авторы: Баранов и Ноздрунов. Год издания - 1982
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2015, 15:30

Как понять "слово в языке не может состоять из фрагментов aa и bb"? (внутри продолжение)
Для меня это задание звучит как &quot;слово, которое не содержит ни aa, ни bb&quot;, но...

Как "устроены" боты в играх?
Привет. Натолкните на мысль. На каких принципах их делают в играх? Каким...

Почему код не работает внутри условия и дает ошибку на переменную "reader"?
FileStream file2 = new FileStream(&quot;d:\\Paris.txt&quot;, FileMode.Open); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru