Форум программистов, компьютерный форум, киберфорум
Другие языки программирования
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
429 / 383 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
1

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

05.10.2015, 15:00. Показов 570. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2015, 15:00
Ответы с готовыми решениями:

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

Как устроены алгоритмы вычисление матриц "matlab"?
Как устроены вычисления в matlab? В частности, как он работает с матрицами? Может ли кто-нибудь...

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

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

__________________
1
Модератор
Эксперт Python
28545 / 15415 / 3046
Регистрация: 12.02.2012
Сообщений: 25,272
Записей в блоге: 4
10.10.2015, 15:30 2
Рекомендую заглянуть в книгу "Язык Форт и его реализация". Авторы: Баранов и Ноздрунов. Год издания - 1982
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2015, 15:30

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как написать регулярное выражение для выдергивания английских букв и символов: "+", ",", ":", "-", " ", "!", "?" и "."
Не могу ни как собразить как написать регулярное выражение для выдергивания английских букв и...

В чем разница между "Порядок выполнения программ на языке C" и "Структура программы на языке C"
в конспектах у себя не нашел, хоть и записывал все, что объяснял преподаватель. вот, собственно,...

Оператор "запятая" внутри условия if(a>0, b>0)
Почему ЭТО не является ошибкой? if(a&gt;0 , b&gt;0) { cout &lt;&lt; &quot;1&quot;; } Что делает запятая?

Как в "switch" создать два условия для "case"?
$point = 0; switch ($value) { case &quot;слово_1&quot;: $point += 1; break; case &quot;слово_2&quot;:...


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

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

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