Hopeless - функциональное программирование на языке HOPE

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
cr0acker
God
Posts: 1078
Joined: 03 Feb 2003 13:53

Post by cr0acker »

Так на днях застучал головой, второй винт, купил новый, поставил на него линь, собрал холесс, при старте пишет

Code: Select all

fpc-2.2.0.x86_64-linux.tar
При этом не интслаится:

Code: Select all

sw-19-001:/home/cr0acker/hopeless-v0.4 # make install
make: *** Нет правила для сборки цели `../test/*.in', требуемой для `errors'.  Останов.
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

cr0acker wrote:Так на днях застучал головой, второй винт, купил новый, поставил на него линь, собрал холесс, при старте пишет

Code: Select all

fpc-2.2.0.x86_64-linux.tar
При этом не интслаится:

Code: Select all

sw-19-001:/home/cr0acker/hopeless-v0.4 # make install
make: *** Нет правила для сборки цели `../test/*.in', требуемой для `errors'.  Останов.
пока ставим вручную :)
бинарь в /usr/local/bin
либы в /usr/local/share/hope/lib
(как у оригинального Hope)

P.S. по идее оно нормально работает если пускать бинарь из текущего каталога (при условии что либы лежат тут же)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Наконец-то дошли руки поправить Makefile, чтобы make install снова заработал :)
Путь для либ теперь /usr/local/share/hopeless (чтобы не конфликтовать с инсталляцией оригинального hope, если таковая существует), а также появился man hopeless ;)
Пока не выкладываю - может ещё чего исправлю :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Отпустил funnylang.org - теперь надо ходить напрямую в http://shabarshin.com/funny/
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Заюзал базы данных - пока в виде sqlite3:

Code: Select all

      $ sqlite3 sqlite.db
       SQLite version 3.1.3
       Enter ".help" for instructions
       sqlite> create table memos(text, priority INTEGER);
       sqlite> insert into memos values('deliver project description', 10);
       sqlite> insert into memos values('lunch with Christine', 100);
       sqlite> select * from memos;
       deliver project description|10
       lunch with Christine|100
       .exit
После этого вот такая программа:

#!/usr/local/bin/hopeless -f
uses db_sqlite;
sql("sqlite.db","select * from memos;");

вернёт вот такой список:

>> [["deliver project description", "10"], ["lunch with Chrustine", "100"]] : list (list string)


Вот исходный код модуля db_sqlite:

Code: Select all

! Database access (sqlite3)

uses string,lines,list;

dec pipes1 : list(char) # list(string) -> list(string);
--- pipes1(nil,l) <= reverse(l);
--- pipes1('|'::y,l) <= pipes1(y,nil::l);
--- pipes1(x::y,nil) <= pipes1(y,(x::nil)::nil);
--- pipes1(x::y,h::l) <= pipes1(y,(h<>(x::nil))::l);

dec pipes : list(list char) -> list(list(string));
--- pipes(nil) <= nil;
--- pipes(x::y) <= pipes1(x,nil)::pipes(y);

dec sql : string # string -> list(list(string));
--- sql(file,statement) <= 
    pipes(lines(read("!sqlite3 -noheader -list "<>file<>" '"<>statement<>"'")));
В будущем sqlite (как и mysql) можно будет встроить непосредственно в hopeless, чтобы не дёргать постоянно внешнюю программу и не перепосылать её вывод во временные файлы.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
cr0acker
God
Posts: 1078
Joined: 03 Feb 2003 13:53

Post by cr0acker »

Товаришь лектор вопросы можно начать задавать?
Как работать с lines, т.е. как получить доступ к произвольной перемнной?
В какой типа читает gets?
Как сранить две строки?
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

cr0acker wrote:Товаришь лектор вопросы можно начать задавать?
Как работать с lines, т.е. как получить доступ к произвольной перемнной?
В какой типа читает gets?
Как сранить две строки?
функция lines бъёт текст (список букв) на строки (список списков букв)

переменных у нас нету, только аргументы функций и алиасы функциональных выражений :)

если ты про доступ к элементам списка, то по номеру можно получить злемент с помощью оператора @ (описан в list.hop)

согласно system.hop функция gets аргументов не имеет и возвращает список строк (т.е. список списков букв) пришедших из входного потока

сравнивать строки можно с помощью оператора =

Code: Select all

hopeless
>: "aa"="aa";
>> true : bool
>: "aa"="bb";
>> false : bool
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
cr0acker
God
Posts: 1078
Joined: 03 Feb 2003 13:53

Post by cr0acker »

На счет сравнения я в принуипе так и думал, но почему тогда:

Code: Select all

>: if "aa"="aa" then write "Press Ctrl-D to quit\n";
                         ^
syntax error
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин
User avatar
cr0acker
God
Posts: 1078
Joined: 03 Feb 2003 13:53

Post by cr0acker »

Как узнать количество элементов списка?
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

cr0acker wrote:На счет сравнения я в принуипе так и думал, но почему тогда:

Code: Select all

>: if "aa"="aa" then write "Press Ctrl-D to quit\n";
                         ^
syntax error
во-первых, write работает только как команда первого уровня - это нельзя вызывать изнутри функций или выражений, а во-вторых if подразумевает не только then, но и else:

Code: Select all

>: if "aa"="aa" then 1 else 2;
>> 1 : num
>: if "aa"="bb" then 1 else 2;
>> 2 : num
cr0acker wrote:Как узнать количество элементов списка?
length из модуля list.hop
Last edited by Shaos on 03 Apr 2010 17:16, edited 1 time in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
cr0acker
God
Posts: 1078
Joined: 03 Feb 2003 13:53

Post by cr0acker »

Надо писать не так:

Code: Select all

>: if "aa"="aa" then write "Press Ctrl-D to quit\n";
                         ^
syntax error 
а вот так

Code: Select all

>: write (if "aa"="aa" then "super \n" else "bad \n");
super

Когда пишеш программу с использованием функцмонального языка программирования надо на программу смотреть снизу.
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин
User avatar
cr0acker
God
Posts: 1078
Joined: 03 Feb 2003 13:53

Post by cr0acker »

Кстати а что там в зопе вместо циклов?
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

cr0acker wrote:Кстати а что там в зопе вместо циклов?
Хвостовая рекурсия.
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Mac Buster wrote:
cr0acker wrote:Кстати а что там в зопе вместо циклов?
Хвостовая рекурсия.
Если надо не все элементы списка обработать, а скажем только со второго по пятый, то можно использовать оператор ..

Code: Select all

uses range, list;

dec do : list num # list alpha -> list alpha;
--- do (a :: b, l) <= l@a :: do (b, l);
--- do (nil, l) <= nil;

do(2..5,[0,10,20,30,40,50,60,70,80]); ! вернет [20,30,40,50]
do(2..5,"abcdefg"); ! вернет "cdef"
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

04-Apr-2010 hopeless-v0.5.tar.bz2 (100K)

* added '\r' to function "isspace" in ctype.hop
* fixed function "dir" in system_win.hop
* path to libraries changed to /usr/local/share/hopeless
* created man file hopeless.1 (modified hope.1)
* fixed "make install" for Hopeless
* new library lib/db_sqlite.hop (database support with sqlite3)
* added functions "del" and "write_to" to lib/system.hop
* check for '\n' and '\r' before run commands ("!...")
* defined constant "stdin" instead of functions "getc" and "gets" (lib/system.hop)
* modified test _input.hop
Я тут за главного - если что шлите мыло на me собака shaos точка net