Введение в логос

Введение в логос

badt

Логос построен таким образом, что вся логика скрывается в пунктуации.

Возможная пунктуация:

ТРОИЦА
  := :: ->
ЧТО ГДЕ КОГДА
  = ≠ ? !
ОСТАЛЬНЫЕ
  < > <= >= + -
  * / ^ % & ~ |

Диалект является описанием символов и пропозиций — грамматикой языковой игры. Из диалектов строится представление о мире, как дискурсе. Диалекты далее можно компоновать для описания более сложных языковых игр.

Элементарные пропозиции: void, iota
Атомарные пропозиции: bool, true, false, int, rune, string (выводятся из элементарных)

:= значит сказать: дать новое название уже возможной структуре. Оператор поддерживает два возможных синтаксиса:

// Прим. АП - атомарная пропозиция
//
// Прямое определение
<АП> := <AП>

// Структурное определение
<АП> :=
  <Символ_1>
  <Символ_2>
  <Cимвол_3>

// Толкование пропозиции
<АП> в контексте :=
  //..несколько строк определения..

:: значит показать: такие символы, о которых нельзя ничего сказать. Взамен на описание структуры, символ определяется тем, что можно о нем сказать — семантикой (списком пропозиций, в которых он встречается).

// Список пропозиций в формате 
//
// <пропозиция> -> значение
<АП> ::
  определенный <АП> контекст -> одно
  <АП> иное выражение -> другое
  //..список пропозиций..

–> значит следует: знак импликации, "если a, то b". Используется для определения значения пропозиций. В таких языках программирования, как Python, вместо этого используется просто присвоение формы a = b, но мне показалось что это немного вздор.

Если слева от стрелки ничего нет (или стоит точка), то импликация устанавливает значение определяемой пропозиции.

not x :=
  x := bool
  -> x ?
    true -> false
    false -> true

y := int
y -> 42

Остальные операторы достаточно тривиальны: = и ≠ проверяют на эквивалентность как структуру сравниваемых пропозиций, так и их значения.

Знак вопроса ? на самом деле же намного интереснее! Он выполняет две основные роли: в качестве суффикса (одного из слов), явно указывает на булевое значение пропозиции, а так же может быть символьным предикатом для йота-пропозиций (сама по себе йота не является пропозицией).

Task := iota
Todo, InProgress, Done := Status

// только в -> bool пропозициях можно
// 
t done? :=
  t := Task
  -> t = Done

format t :=
  t := Task

  // <йота> ? {многострочные варианты}
  -> t ?
    Todo -> "TODO"
    InProgress -> "IN PROGRESS"
    Done -> "DONE"

Report Page