Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

бастакелл

Автор basta, мая 24, 2012, 18:00

0 Пользователи и 1 гость просматривают эту тему.

basta

декоративный форк языка программирования haskell. есть какое-то тяготение к лиспу, да...

* префиксность ради префиксности и связанное с этим отмирание всего инфиксного, смешанного и постфиксного, и большой массы сахара и скобок...
* скобки остаются лишь для списков неопределённой длины
* сакральность пробелов и отступов: имя всякой функции окружено пробелами, и аргументы отбиты правее функции
* табуляции, некрасивое форматирование и прочие мелочи -- провоцируют синтаксическую ошибку (форматтер-наци)
* байтофилия окончательно запрещена (нету хаскеллевских Инт8, Инт16, Инт32...)
* всё стандартное выделяется жирным, кроме того: значения синим или фиолетовым, типы и классы красным, комменты зелёным

объявление функции:
= ( fun a b c d e f g k n )
  / a
    div * b c
        sum ( : d e f g ^ k n )


для сравнения то же в s-выражениях:
(= (fun a b c d e f g k n)
   (/ a
      (div (* b c)
           (sum (list d e f g (^ k n)))


и на оригинальном хачкеле:
fun a b c d e f g k n = a / (div (b * c) (sum [d, e, f, g, k^n]))

ошибок и многозначностей не случается потому, что более правые функции связываются раньше, будто бы $ по умолчанию, за исключением случаев когда это первый аргумент функции высших порядков (поэтому ни лямбды, ни сечений...).

Символы: 'a, 'b, '0, '\n, '\t, ...
Строки: "Нивы сжаты, \"рощи голы', от воды\\ туман и сырость.\n" даёт: Нивы сжаты, "рощи голы', от воды\ туман и сырость. -- и переносит строку.
Списки: ( : a b c d e )
Кортежи: ( , a b c d e )
Комменты: --это спасительный комментарий
{-И это тоже. И не надо их вкладывать друг в друга.-}

и т.д. в таком же духе.
даже так ( import Data.List Ratio Monads MyYoModule )

необязательное ручное типование 1) перед объявлением функции или переменной, или 2) перед значением
= ( Int fun Num a Eq b Int c Int d Int e f g Int k n )--внимание: здесь f, g и n будут выводиться автоматически!
то же самое:
= ( ( -> Num c Eq b Int Int Int a a Int a Int ) fun a b c d e f g k n )
вбиваем в воображаемый интерпретатор:
> let = ( n ) Ratio 5
> n
5/1


весьма сносно получилось :smoke:

basta


Triton

Цитата: basta от мая 24, 2012, 18:02
if b then x else y
становится
if b x y.
Еще чуть-чуть, и вы изобретёте Tcl.
Молиться, поститься и слушать радио Ватника

basta

Цитата: Triton от мая 24, 2012, 19:22
Еще чуть-чуть, и вы изобретёте Tcl.
да ну бросьте, расстояние пешком до китая. тцл вообще какой-то фейспалм: мало динамической типизации, так ещё императивный.

Triton

Цитата: basta от мая 24, 2012, 20:36
Цитата: Triton от мая 24, 2012, 19:22
Еще чуть-чуть, и вы изобретёте Tcl.
да ну бросьте, расстояние пешком до китая. тцл вообще какой-то фейспалм: мало динамической типизации, так ещё императивный.
Вы б еще к Форту такие претензии предъявили.  :)
Молиться, поститься и слушать радио Ватника

basta

Цитата: Triton от мая 25, 2012, 05:44
Вы б еще к Форту такие претензии предъявили.  :)
и предъявлю. это мой персональный конланг.

maristo

Цитироватьбастакелл

Я подумал, что форк какого-то финноугорского.
«Toute discussion theorique est vaine: l'Esperanto fonctionne» Antoine Mеillet

fujhi

Цитата: basta от мая 24, 2012, 18:00
и отступов
Цитата: basta от мая 24, 2012, 18:00
* табуляции, некрасивое форматирование и прочие мелочи -- провоцируют синтаксическую ошибку (форматтер-наци)
В лиспе был отступной синтаксис: http://srfi.schemers.org/srfi-49/srfi-49.html
Но что-то никто не спешит, стать отступником.

Цитата: basta от мая 24, 2012, 18:00
* всё стандартное выделяется жирным, кроме того: значения синим или фиолетовым, типы и классы красным, комменты зелёным
Это рекомендаци, для претти принтера?
Этот аккаунт официально заброшен. Связаться со мной можно по всё тому же адресу, [email]dmymd@yandex.ru[/email]. Всем пока!

basta

Цитата: maristo от мая 25, 2012, 09:44
Цитироватьбастакелл
Я подумал, что форк какого-то финноугорского.
да, вы попались на мою уловку.

Цитата: fujhi от мая 25, 2012, 09:46
Цитата: basta от мая 24, 2012, 18:00
и отступов
Цитата: basta от мая 24, 2012, 18:00
* табуляции, некрасивое форматирование и прочие мелочи -- провоцируют синтаксическую ошибку (форматтер-наци)
В лиспе был отступной синтаксис: http://srfi.schemers.org/srfi-49/srfi-49.html
Но что-то никто не спешит, стать отступником.
в лиспе и без скобок списки остаются списками неопределённой длины. в моёи языке таких мало, и те что есть, как раз окружены скобками. наверняка без скобок не удобно их юзать.

Цитировать
Цитата: basta от мая 24, 2012, 18:00
* всё стандартное выделяется жирным, кроме того: значения синим или фиолетовым, типы и классы красным, комменты зелёным
Это рекомендаци, для претти принтера?
во всех же редакторах есть подсветка и выделения... впрочем цвета можно менять, главное чтобы эти пять различались.

fujhi

Цитата: basta от мая 25, 2012, 10:02
в лиспе и без скобок списки остаются списками неопределённой длины. в моёи языке таких мало, и те что есть, как раз окружены скобками.
А код, выходит--сам код не список и макросами не меняем? То есть, от лиспа только инфискная нотация, а самого важного--нет?!!

Цитата: basta от мая 25, 2012, 10:02
во всех же редакторах есть подсветка и выделения... впрочем цвета можно менять, главное чтобы эти пять различались.
Я уже подумал, может, вы цветом синтаксис кодировать--как в колорфорте! Ну, хранить тогда, не в плейнтексте, а с размеченными цветами--можно с минимальной разметкой цветов--было бы забавно, такой язык!
Этот аккаунт официально заброшен. Связаться со мной можно по всё тому же адресу, [email]dmymd@yandex.ru[/email]. Всем пока!

basta

Цитата: fujhi от мая 25, 2012, 14:08
А код, выходит--сам код не список и макросами не меняем? То есть, от лиспа только инфискная нотация, а самого важного--нет?!!
(Вы хотели сказать префиксная.)

Нет же, списки никуда не деются! Просто когда у функции фиксированное число аргументов, то можно не писать скобки! Так и бывает в большинстве случаев, поэтому скобок -- мало. А в модуле начало файла понимается как открывающая скобка, а конец файла как закрывающая.

Цитата: fujhi от мая 25, 2012, 14:08
Я уже подумал, может, вы цветом синтаксис кодировать--как в колорфорте! Ну, хранить тогда, не в плейнтексте, а с размеченными цветами--можно с минимальной разметкой цветов--было бы забавно, такой язык!
прикольно, наверное...

fujhi

Цитата: basta от мая 25, 2012, 14:41
(Вы хотели сказать префиксная.)
Ну, да.

Цитата: basta от мая 25, 2012, 14:41Нет же, списки никуда не деются! Просто когда у функции фиксированное число аргументов, то можно не писать скобки! Так и бывает в большинстве случаев, поэтому скобок -- мало.
Проблемы возникнут при передаче функций, как переменных! Статическая типизачия чуть спасает, но -- не совсем.

А если функция принимает переменное число параметров-функций и возвращает другую функцию--что делать?

Цитата: basta от мая 25, 2012, 14:41
прикольно, наверное...
Согласен, но отказ от плейнтекста--это слишком серьезная проблема.
Этот аккаунт официально заброшен. Связаться со мной можно по всё тому же адресу, [email]dmymd@yandex.ru[/email]. Всем пока!

basta

Цитата: fujhi от мая 25, 2012, 14:52
Проблемы возникнут при передаче функций, как переменных! Статическая типизачия чуть спасает, но -- не совсем.
у функций высших порядков просто выше приоритет. они берут функцию за рога до того как она успеет попросить аргументов.

хаскелл:
map (1+) [1,2,3..]
или с лямбдой
map (\x->x+1) [1,2,3..]

бастакелл:
map \ x + x 1 ( :.. 1 2 )

вроде всё однозначно. мап берёт ровно два аргумента: лямбду и список чисел. прежде лямбда берёт ровно два аргумента: кучку переменных и функцию с их участием. если в объявлении функции или в лямбде в кучке переменных всего один элемент, то скобки не пишутся (выше я неправильно написал). а если там ничего, то и лямбду нечего использовать.

ЦитироватьА если функция принимает переменное число параметров-функций и возвращает другую функцию--что делать?
это как -- функция с переменным числом параметров? у меня такой нет. всё разновеликое засовывается в список ( : f1 f2 f3 ) и т.д. , и работа идёт уже через список, а число аргументов объявленной функции всегда постоянно... привели бы пример чтоли...

вот склеивание функций:

= ( f g h )
  \ (
x y z )
    + (
g x )
      (
h y z )


или так

= ( ( -> a a a ) f ( -> a a ) g ( -> a a a ) h )
  \ (
x y z )
    +
g x
      h y z


допустим
= m f negate *
тогда
m 5 2 3
даёт
1

главное не переусложнить синтаксис сейчас :umnik:

fujhi

Цитата: basta от мая 25, 2012, 19:54
это как -- функция с переменным числом параметров? у меня такой нет. всё разновеликое засовывается в список ( : f1 f2 f3 ) и т.д. , и работа идёт уже через список, а число аргументов объявленной функции всегда постоянно... привели бы пример чтоли...
Пример? Вон в Лиспе все арифметические функции принимают любое число параметров.

(+ a b c d e)

Собственно, этим иногда и оправдывают скобки лиспа: зато можно любое число параметров передать.

Пример с переменным числом лямбд чуть сложнее придумать, но, думаю, и для такого польза найдётся.
Этот аккаунт официально заброшен. Связаться со мной можно по всё тому же адресу, [email]dmymd@yandex.ru[/email]. Всем пока!

basta

ну а у меня аргументы засовываются в бесконечную, но единственную структуру -- список. пока повторяющиеся аргументы одного типа, даже выглядит как-то логичнее пользоваться списком, а иначе... даже не представляю такую задачу, где нужно такое не-знаю-что-не-знаю-сколько...

sum ( : a b c d e )

basta

Цитата: basta от мая 25, 2012, 19:54
= ( ( -> a a a ) f ( -> a a ) g ( -> a a a ) h )
= ( ( -> a a a a ) f ( -> a a ) g ( -> a a a ) h )

basta


basta

Цитата: basta от мая 24, 2012, 18:00
объявление функции:
= ( fun a b c d e f g k n )
  / a
    div * b c
        sum ( : d e f g ^ k n )

Цитировать= Ratio n 5
поскольку заранее известно, конечно ли число аргументов у функции или нет (предполагается что в объявлении функции всегда бесконечно), постольку необязательно писать открывающую скобку -- детектор такой функции. вот и назрела реформа. оставшаяся закрывающая скобка выглядит очень одиноко, поэтому я её заменю на точку. вообще в хаскеле точка уже занята, но ту я выкинул. если кому-нибудь пригодится этот композитор -- без труда напишут сами. та точка, вроде как, решала проблемы интефиксности и приоритетов, которые сейчас поотваливались.

= Ratio n . 5

= fun a b c d e f g k n .
  /
a
    div * b c
        sum : d e f g ^ k n .


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

= fun a b c d e f g k n . / a div * b c sum : d e f g ^ k n .

бесскобочный лисп так не может, потому что лисп так не может by design. если я правильно понимаю, в хаскеле, в отличие от лиспа, нет ни одной функции (или -оида) с неопределённым числом аргументов. тот же список [1, 2, 3, 4, 146] расписывается как много двухместных конструкторов 1:2:3:4:146:[] и т.д.. так бы и шло, но отказ от инфиксности видимо стоит именно столько: приходиться для удобства ввести в язык лиспосписки. может можно как-то по-другому? или лучше впустить в язык немножко инфиксности (смириться с тем что иногда это удобно...)? или, отчаявшись, писать : : : : : 1 2 3 4 146 []? посоветуйте.

полный перечень бесконечных синтаксических структур в моём языке, требующих одну точку:
import
:
,
|

косвенно (то есть после них обязательно идёт такая структура, но сами они конечные):
=
data

возможно какие-то забыл, какие ещё даже не знаю (да, я пока что сопливый ваннаби-хаске-хакер).

hs: data Школьники = Иван | Петян | Роман | Степан
bs: data Школьники . | Иван Петян Роман Степан .

wangjhenbai

голая спецификация без реализации не нужна
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

basta

Цитата: wangjhenbai от июня 18, 2012, 16:55
голая спецификация без реализации не нужна
в хаскель должно переводиться без проблем, за исключением форматтер-наци -- это посложнее будет написать, да.

wangjhenbai

Так напишите препроцессор же. Гораздо интереснее играться с тем, что уже́ есть, тогда лучше видно, чего не хватает и что плохо.
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

basta

Цитата: wangjhenbai от июня 18, 2012, 17:14
Так напишите препроцессор же. Гораздо интереснее играться с тем, что уже́ есть, тогда лучше видно, чего не хватает и что плохо.
да и общение с компилятором помогает упорядочить мысли и понять чего я на самом деле не хочу.
а на чём писать и как выкладывать на обзор?
у меня вот линукс 3.2, и мне как-то совсем не хочется клепать ЕХЕшники.
думаю, free pascal — самый простой и дешёвый вариант.

wangjhenbai

Цитата: basta от июня 22, 2012, 19:43
а на чём писать
На том, что Вам нравится и в чём Вы наиболее продуктивны.

Цитата: basta от июня 22, 2012, 19:43
как выкладывать на обзор?
Уж как Вам удобно. :)

Цитата: basta от июня 22, 2012, 19:43
у меня вот линукс 3.2, и мне как-то совсем не хочется клепать ЕХЕшники.
думаю, free pascal — самый простой и дешёвый вариант.
Ы-нет, для фрыпаскаля как раз труъ-вариант — экзешники. Потому что нельзя ожидать, что у пользователя будет фрипаскаль, чтобы что-то скомпилировать.

Впрочем, на самом деле это не важно. На чём напишите, то будет. Главное — написать, переписать на другой язык потом не проблема.
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

basta

вакаримасита.

Цитировать
Ы-нет, для фрыпаскаля как раз труъ-вариант — экзешники. Потому что нельзя ожидать, что у пользователя будет фрипаскаль, чтобы что-то скомпилировать.
а как же их дефис "write once, compile everywhere" ? компилятор идёт почти на все платформы (как и ГНУ Си, но я не люблю Си), пусть ставят и конпелируют сами же.

arseniiv

Можно на Lua написать, на схеме, на Ruby, на самом же Haskell. (Эти у меня есть просто. :eat:)

Удачи!

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр