nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 23 Oct 2017 03:52



Reply to topic  [ 57 posts ]  Go to page Previous  1, 2, 3, 4  Next
Hopeless - функциональное программирование на языке HOPE 
Author Message
God
User avatar

Joined: 03 Feb 2003 16:53
Posts: 1095
Reply with quote
Post 
Так на днях застучал головой, второй винт, купил новый, поставил на него линь, собрал холесс, при старте пишет
Code:
fpc-2.2.0.x86_64-linux.tar

При этом не интслаится:
Code:
sw-19-001:/home/cr0acker/hopeless-v0.4 # make install
make: *** Нет правила для сборки цели `../test/*.in', требуемой для `errors'.  Останов.

_________________
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин


28 Jun 2008 18:05
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15563
Location: Colorado
Reply with quote
Post 
cr0acker wrote:
Так на днях застучал головой, второй винт, купил новый, поставил на него линь, собрал холесс, при старте пишет
Code:
fpc-2.2.0.x86_64-linux.tar

При этом не интслаится:
Code:
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. по идее оно нормально работает если пускать бинарь из текущего каталога (при условии что либы лежат тут же)

_________________
:eugeek: https://twitter.com/Shaos1973


29 Jun 2008 01:06
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15563
Location: Colorado
Reply with quote
Post 
Наконец-то дошли руки поправить Makefile, чтобы make install снова заработал :)
Путь для либ теперь /usr/local/share/hopeless (чтобы не конфликтовать с инсталляцией оригинального hope, если таковая существует), а также появился man hopeless ;)
Пока не выкладываю - может ещё чего исправлю :roll:

_________________
:eugeek: https://twitter.com/Shaos1973


03 Jun 2009 02:19
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15563
Location: Colorado
Reply with quote
Post 
Отпустил funnylang.org - теперь надо ходить напрямую в http://shabarshin.com/funny/

_________________
:eugeek: https://twitter.com/Shaos1973


09 Aug 2009 18:23
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15563
Location: Colorado
Reply with quote
Post 
Заюзал базы данных - пока в виде sqlite3:

Code:
      $ 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:
! 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, чтобы не дёргать постоянно внешнюю программу и не перепосылать её вывод во временные файлы.

_________________
:eugeek: https://twitter.com/Shaos1973


27 Aug 2009 23:01
Profile WWW
God
User avatar

Joined: 03 Feb 2003 16:53
Posts: 1095
Reply with quote
Post 
Товаришь лектор вопросы можно начать задавать?
Как работать с lines, т.е. как получить доступ к произвольной перемнной?
В какой типа читает gets?
Как сранить две строки?

_________________
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин


28 Aug 2009 16:26
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15563
Location: Colorado
Reply with quote
Post 
cr0acker wrote:
Товаришь лектор вопросы можно начать задавать?
Как работать с lines, т.е. как получить доступ к произвольной перемнной?
В какой типа читает gets?
Как сранить две строки?


функция lines бъёт текст (список букв) на строки (список списков букв)

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

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

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

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

Code:
hopeless
>: "aa"="aa";
>> true : bool
>: "aa"="bb";
>> false : bool

_________________
:eugeek: https://twitter.com/Shaos1973


28 Aug 2009 18:51
Profile WWW
God
User avatar

Joined: 03 Feb 2003 16:53
Posts: 1095
Reply with quote
Post 
На счет сравнения я в принуипе так и думал, но почему тогда:
Code:
>: if "aa"="aa" then write "Press Ctrl-D to quit\n";
                         ^
syntax error

_________________
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин


29 Aug 2009 14:00
Profile
God
User avatar

Joined: 03 Feb 2003 16:53
Posts: 1095
Reply with quote
Post 
Как узнать количество элементов списка?

_________________
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин


29 Aug 2009 14:01
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15563
Location: Colorado
Reply with quote
Post 
cr0acker wrote:
На счет сравнения я в принуипе так и думал, но почему тогда:
Code:
>: if "aa"="aa" then write "Press Ctrl-D to quit\n";
                         ^
syntax error


во-первых, write работает только как команда первого уровня - это нельзя вызывать изнутри функций или выражений, а во-вторых if подразумевает не только then, но и else:

Code:
>: if "aa"="aa" then 1 else 2;
>> 1 : num
>: if "aa"="bb" then 1 else 2;
>> 2 : num


cr0acker wrote:
Как узнать количество элементов списка?


length из модуля list.hop

_________________
:eugeek: https://twitter.com/Shaos1973


Last edited by Shaos on 03 Apr 2010 20:16, edited 1 time in total.



29 Aug 2009 20:00
Profile WWW
God
User avatar

Joined: 03 Feb 2003 16:53
Posts: 1095
Reply with quote
Post 
Надо писать не так:
Code:
>: if "aa"="aa" then write "Press Ctrl-D to quit\n";
                         ^
syntax error

а вот так
Code:
>: write (if "aa"="aa" then "super \n" else "bad \n");
super



Когда пишеш программу с использованием функцмонального языка программирования надо на программу смотреть снизу.

_________________
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин


01 Sep 2009 14:08
Profile
God
User avatar

Joined: 03 Feb 2003 16:53
Posts: 1095
Reply with quote
Post 
Кстати а что там в зопе вместо циклов?

_________________
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин


01 Sep 2009 14:28
Profile
Retired

Joined: 04 Aug 2003 01:37
Posts: 1483
Location: Moscow
Reply with quote
Post 
cr0acker wrote:
Кстати а что там в зопе вместо циклов?

Хвостовая рекурсия.

_________________
Extreme Entertainment


01 Sep 2009 15:54
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15563
Location: Colorado
Reply with quote
Post 
Mac Buster wrote:
cr0acker wrote:
Кстати а что там в зопе вместо циклов?

Хвостовая рекурсия.


Если надо не все элементы списка обработать, а скажем только со второго по пятый, то можно использовать оператор ..

Code:
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"

_________________
:eugeek: https://twitter.com/Shaos1973


01 Sep 2009 21:32
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15563
Location: Colorado
Reply with quote
Post 
http://www.hopelog.com

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

_________________
:eugeek: https://twitter.com/Shaos1973


04 Apr 2010 01:05
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 57 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.