LINUX.ORG.RU

Новый язык программирования для русскоговорящих

 , ,


1

1

Синтаксис от Хаскеля, семантика от Ракета.

факториал(сч) =
  если (сч == 1)
    1
    сч * факториал (сч - 1)

фибоначчи(сч) =
  если (сч < 3)
       1
       пусть рекурсия (н-1 1 ; н 2; тек-сч 3)
         если (сч == тек-сч) н $ рекурсия н (н + н-1) $ тек-сч + 1

Будет ещё конструкция надо-быстро с семантикой от Си (и использованием gcc).

Исходники: https://github.com/Kalimehtar/russian-lang

Пакет для Ракета: https://pkgd.racket-lang.org/pkgn/package/russian-lang

Документация: https://docs.racket-lang.org/russian-lang/index.html

★★★★★

Ответ на: комментарий от RazrFalcon

Как эта наркомания вообще читается?

Это локальные переменные и их значения. Точка с запятой разделяет переменные. Пробельный символ отделяет переменную от значения.

То есть «н-1 равно 1, н равно 2, а тек-сч равно 3».

monk ★★★★★ ()

@den73, зачем ты укусил ТСа?

ТС, мало скреп и падежей на строку кода, много знаков еретицких славянскому глазу чуждых, надо

факториал числа исчислять справно так:
  нежели число то равно единице
    то единицу взад вертай
    иначе число то на факториал числа убавленного помножь
  во славу государства Русского
Боже царя храни
t184256 ★★★★★ ()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от anonymous

Уже разработанный. В смысле, приведённый пример уже компилируется. Есть поддержка приоритетов операций.

Но пока альфа версия. Переведена достаточно небольшая часть стандартной библиотеки Ракета.

monk ★★★★★ ()
Ответ на: комментарий от monk

Уже разработанный. В смысле, приведённый пример уже компилируется. Есть поддержка приоритетов операций.

Выхлоп компилятора каков /сишный текст, лисп, …/?

Владимир

anonymous ()
Ответ на: комментарий от anonymous

не понятно, по какому приципу делаются отступы

Отступ делается, если следующая строка является аргументом к текущей. То есть одно и то же можно записать

список(1 2 список(3 4) список(5 6) 7)

или

список 1 2
  список 3 4
  список 5 6
  7

Идея заимствована из SRFI-110.

и что означает $, может его тоже надо перевести

Это знак, указывающий, что после него идёт команда

список 1 2 $ список 3 4

равнозначно

список 1 2 
  список 3 4

равнозначно

список 1 2 (список 3 4)
monk ★★★★★ ()
Ответ на: комментарий от anonymous

Выхлоп компилятора каков /сишный текст, лисп, …/?

Семантика Ракета. Сверху свой парсер и перевод библиотечных функций.

фибоначчи(сч) =
  если (сч < 3)
       1
       пусть рекурсия (н-1 1 ; н 2; тек-сч 3)
         если (сч == тек-сч) н $ рекурсия н (н + н-1) $ тек-сч + 1

будет

(define (фибоначчи сч)
  (if (< сч 3)
      1
      (let рекурсия ((н-1 1) (н 2) (тек-сч 3))
         (if (= сч тек-сч) н (рекурсия н (+ н н-1) (+ тек-сч 1))))))

Сишный выхлоп и компиляция через gcc будет в отдельно подъязыке надо-быстро.

monk ★★★★★ ()

факториал(сч) = если (сч == 1) 1 сч * факториал (сч - 1)

это ужасное, нечитаемое уродство еще хуже лямбд - используй скобки люк - их все понимают и сам не налажаешь

н-1 1

за такое надо po pope nadavat’!

не ну серъезно парни, зачем вы постоянно пытаетесь усложить обычную конструкцию из двух скобок и придумать настолько нечитаемые переменные, что приходится вглядываться где у нее имя а где значение? это плодит неочевидные баги и маты потомков

rukez ()
Ответ на: комментарий от rukez

это ужасное, нечитаемое уродство еще хуже лямбд - используй скобки люк - их все понимают и сам не налажаешь

Поддержка скобок оставлена в полном объёме. Но многие пишут, что лиспы нечитаемы из-за их огромного количества.

monk ★★★★★ ()
Ответ на: комментарий от monk

Поддержка скобок оставлена в полном объёме. Но многие пишут, что лиспы нечитаемы из-за их огромного количества.

Как сишную функцию вызвать, подключать библиотеки, работа с памятью, …, …, …?

Владимир

anonymous ()
Ответ на: комментарий от monk

Эй, я в курсе, это буквально в первой строке шапки прописано. Но когда ты перешел от

синтаксис от Ракета

к

синтаксис Ракета

меня закономерно прорвало. Меня всегда с антиглобализма прорывает.

t184256 ★★★★★ ()
Ответ на: комментарий от anonymous

Не всем нравится такой стиль кодирования …

Можно так:

факториал(число) =
  если (число == 1)
    1
    число * факториал (число - 1)

фибоначчи(число) =
  если (число < 3)
    1
    пусть рекурсия
      ;
        предыдущее-значение 1
        текущее-значение 2
        номер-элемента 3
      если
        число == номер-элемента
        текущее-значение 
        рекурсия
          текущее-значение
          текущее-значение + предыдущее-значение
          номер-элемента + 1
monk ★★★★★ ()
Ответ на: комментарий от den73

Ага. Сначала хотел sweet-exp до актуального состояния SRFI-110 довести. А потом решил, что полная визуальная совместимость мне не особо нужна, а операции с приоритетами как в хаскеле очень пригодятся.

monk ★★★★★ ()
Ответ на: комментарий от monk

Вот у них на вопрос «Как сишную функцию вызвать, подключать библиотеки, работа с памятью, …, …, …?» всё очень печально.

Скорее всего.
Ведь они под 1С подстраиваются …
По идее правда они должны были обеспечить возможность использования C# по полной катушке /не вникал/.

Владимир

anonymous ()
Ответ на: комментарий от monk

Обычно придерживаюсь такого стиля именования переменных /на примере ваших имен переменных/: ТекущееЗначение, ПредыдущееЗначение, НомерЭлемента, …

У меня так: CurValue, PrevValue, NumItem, …
Русские имена использую для объектов, имен полей, …
Название операторов «Если», … 1С никогда не использую /if, …/.

Как известно - «На вкус и цвет, товарищей нет».

Владимир

anonymous ()