Следующая страница > 1 < [2]

Автор Сообщение

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1266   2010-01-29 00:09 GMT+3 часа(ов)      
Примитивный загрузчик текстовых файлов написанный за 15 минут!
(define (text-downloader host fname save-fname)
(if (and (string? host)
(string? fname)
(string? save-fname))
(let ((host-port (open-tcp-client (list server-address: host
port-number: 80)))
(fport (if (zero? (string-length save-fname))
(current-output-port)
(open-output-file save-fname))))
(newline)
(display
(string-append
"GET /" fname " HTTP/1.0\n"
"Host: " host "\n"
"User-Agent: FuckZilla\n"
"\n")
host-port)
(force-output host-port)
(display "<!--\n" fport)
(do ((str (read-line host-port) (read-line host-port)))
((cond
((eof-object? str) #t)
((string=? str "\r") #t)
(else #f)) (display "-->\n" fport))
(display str fport))
(do ((str (read-line host-port) (read-line host-port)))
((eof-object? str) )
(begin
(display str fport)))
(close-output-port fport)
(close-port host-port)
(newline))))
;(text-downloader "www.lisp.ru" "" "")
 
;(text-downloader "www.lisp.ru" "forums.php" "c:\\forums.html")

Pirr

Members


Статус

36 сообщений
http://hiasm.com
Где: Russia
Род занятий:
Возраст:

#1267   2010-01-29 13:43 GMT+3 часа(ов)      
Нужная весЧ. Недавно сам такое пробовал, но не получилось
А можешь сделат пример чтения и разбора (парсинга) текстового конфигурационного файла (.ini, .cfg)?
HiASM - это просто праздник какой-то!

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1268   2010-01-29 15:59 GMT+3 часа(ов)      
Если конфиги имеют сложный формат, то придется их посимвольно разбирать, т.е. писать лексер и парсер.
А если имеют вид ассоциативного списка ((num1 . 20) (num2 . 10)), то все просто
> (define fport (open-output-file "c:\\conf.cfg"))
> (write '((num1 . 20) (num2 . 10)) fport)
> (close-output-port fport)
> (set! fport (open-input-file "c:\\conf.cfg"))
> (define db (read fport))
> (close-input-port fport)
> db
((num1 . 20) (num2 . 10))

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1269   2010-01-29 16:25 GMT+3 часа(ов)      
Я ранее писал парсер химической формулы(для расчета молярной массы), если интересно, то могу показать исходник.
Пример работы:
(chem-string->molar-mass  "Al2(SO4)3") => 342.1478
(chem-string->molar-mass "Al2(S(O)4)3") => 342.1478
(chem-string->molar-mass "C10H21OH") => 158.2874
(chem-string->molar-mass "C17H35COOH") => 284.4884
(chem-string->molar-mass "Na2CO3(H2O)10") => 286.143
(chem-string->molar-mass "(C6H5)C2H5") => 106.1696
(chem-string->molar-mass "(C6H5)CO2Na") => 144.107
(chem-string->molar-mass "Na2CO3") => 105.989
(chem-string->molar-mass "Ca(H2PO4)2") => 234.0548
(chem-string->molar-mass "(CH3NH3)Cl") => 67.5189
(chem-string->molar-mass "C5H5N5") => 135.1295
(equal-chem-strings? "H2O2" "O2H2") => #t

Pirr

Members


Статус

36 сообщений
http://hiasm.com
Где: Russia
Род занятий:
Возраст:

#1270   2010-01-29 19:07 GMT+3 часа(ов)      
Миша - спасибо!
Любой практический материал на Схеме приветствуется, а если еще и с коментариями, то вообще супер будет.
Я когда изучаю чужой код или пробую писать свой код на не знакомом языке, так коментирую каждую строчку. Очень удобно в обучении - не дает забыть пройденный материал.
HiASM - это просто праздник какой-то!

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1271   2010-01-29 19:31 GMT+3 часа(ов)      
Прокомментировать конечно можно. Вот только, что именно? Какие строки или части вызывают вопросы?

Pirr

Members


Статус

36 сообщений
http://hiasm.com
Где: Russia
Род занятий:
Возраст:

#1272   2010-01-29 19:56 GMT+3 часа(ов)      
Все вроде понятно, но просто когда пробегаешь взгядом по коду и читаешь коментарии лучше усваивается материал.
Обычно вопросы появляются в сложных (высокого порядка) функциях и цыклах.

отредактировал(а) Pirr: 2010-01-29 20:13 GMT+3 часа(ов)
HiASM - это просто праздник какой-то!

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1273   2010-01-30 03:39 GMT+3 часа(ов)      
Я в принципе понял, но дело в том, что функции высокого порядка могут быть и простыми.
Вопрос на засыпку: А сколько вы знаете видов циклов в Схеме?

Pirr

Members


Статус

36 сообщений
http://hiasm.com
Где: Russia
Род занятий:
Возраст:

#1275   2010-01-31 14:38 GMT+3 часа(ов)      
Ну, да... поймал В Схеме нет циклов, там сплошная рекурсия.

Вот например как прочитать и распарсить такой конфиг:
config.ini
[patch]
C:\111\

[log]
c:\111\log.txt

[audio]
sound=true
volume=5


И создать такую функцию или макрос, чтобы было так:
(load-config patch) => "c:\111\"
(load-config log) => "c:\111\log.txt"
(load-config audio) => ((sound . true) (volume . 5))
HiASM - это просто праздник какой-то!

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1276   2010-02-01 01:31 GMT+3 часа(ов)      
А как тебе такая функция:
>(parse-conf-file "c:\conf.cfg")
((patch . "C:\111\") (log . "c:\111\log.txt") (audio (sound . #t) (volume . 5)))

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1277   2010-02-01 01:36 GMT+3 часа(ов)      
Я на досуге написал парсер, правда убил на него два часа.

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1278   2010-02-01 03:52 GMT+3 часа(ов)      
К сожалению, я так и не оплатил интернет за февраль, поэтому появлюсь в сети через неделю, а возможно и раньше
Я исходник переместил сюда. Полного тестирования я так и не произвел, поэтому за последствия не ручаюсь ...возможно код даже не будет работать

PS Когда вернусь в сеть отвечу на все вопросы.

PPS load-config реализуете самостоятельно, т.к. работа с ассоциативными списками описана в любом нормальном учебнике.

Pirr

Members


Статус

36 сообщений
http://hiasm.com
Где: Russia
Род занятий:
Возраст:

#1280   2010-02-01 16:36 GMT+3 часа(ов)      
Миша спасибо.
Попробую теперь разобраться в исходнике.
Смотря на него понимаю, почему у меня не получается со Схемой. Язык то простой, но простые вещи на нем дюже страшно выглядят.
HiASM - это просто праздник какой-то!

Pirr

Members


Статус

36 сообщений
http://hiasm.com
Где: Russia
Род занятий:
Возраст:

#1281   2010-02-01 18:28 GMT+3 часа(ов)      
Все работает. Но прочесть исходник не могу.
HiASM - это просто праздник какой-то!

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1297   2010-02-08 16:06 GMT+3 часа(ов)      
Цитата
Pirr :
Все работает. Но прочесть исходник не могу.

Почему? Вроде все по r5rs.

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1298   2010-02-08 16:09 GMT+3 часа(ов)      
Может функции какие пояснить? Например, letrec или call/cc?

Pirr

Members


Статус

36 сообщений
http://hiasm.com
Где: Russia
Род занятий:
Возраст:

#1302   2010-02-08 18:31 GMT+3 часа(ов)      
Поясни все! - если не трудно.

Пытался повторить тоже самое в CL - не получилось.
Зато в newLisp - кое, что вышло:

(set 'parse-config (parse (read-file "c:/111/conf.cfg") "\r\n")) =>
("[patch]" "C:\111\" "[log]" "c:\111\log.txt" "[audio]" "sound=true" "volume=5")


Получаем хороший список, который можно уже обрабатывать.

Например, так:

(dolist (x '("[patch]" "[log]" "[audio]"))
(set (sym (string (1 -1 x) "-value"))
(parse-config (+ 1 (find x parse-config)))))


Теперь переменные patch-value, log-value, audio-value имеют соответствующие значения: "C:\\111\\", "c:\\111\\log.txt", "sound=true". Правда с секции [audio] не все параметры считываются, но это уже нюансы.
HiASM - это просто праздник какой-то!

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1303   2010-02-08 19:27 GMT+3 часа(ов)      
А как будем такое парсить? Мой код с этим справляется (правда, не совсем правильно).

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1304   2010-02-08 20:04 GMT+3 часа(ов)      
Исправленный код здесь.

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1305   2010-02-08 20:06 GMT+3 часа(ов)      
Комментировать там нечего. Принцип работы опишу, если тебе интересно?

Pirr

Members


Статус

36 сообщений
http://hiasm.com
Где: Russia
Род занятий:
Возраст:

#1306   2010-02-08 20:16 GMT+3 часа(ов)      
Цитата
misha :
А как будем такое парсить? Мой код с этим справляется (правда, не совсем правильно).


Ну ты загнул!
Вообщето для ini-файлов есть грамматика:
Цитата
inidata = spaces, {section} .
section = "[", ident, "]", stringSpaces, "\n", {entry} .
entry = ident, stringSpaces, "=", stringSpaces, value, "\n", spaces .
ident = identChar, {identChar} .
identChar = letter | digit | "_" | "." | "," | ":" | "(" | ")" | "{" | "}" | "-" | "#" | "@" | "&" | "*" | "|" .
value = {not "\n"} .
stringSpaces = {" " | "\t"} .
spaces = {" " | "\t" | "\n" | "\r"} .

Решая проблему парсера, я пришел к выводу, что для Lisp программ, конфиги тоже нужно делать на Lisp как в Emacs. И нечего себе мозг парить.
HiASM - это просто праздник какой-то!

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1307   2010-02-08 22:02 GMT+3 часа(ов)      
Pirr
Вообщето для ini-файлов есть грамматика:

Это скорее предписание, чем правило.
Pirr
Решая проблему парсера, я пришел к выводу, что для Lisp программ, конфиги тоже нужно делать на Lisp как в Emacs. И нечего себе мозг парить.
Чё скис? Зы.. Я тебе в самом начале на это указал.

Pirr

Members


Статус

36 сообщений
http://hiasm.com
Где: Russia
Род занятий:
Возраст:

#1309   2010-02-09 12:28 GMT+3 часа(ов)      
Цитата
misha :
Чё скис? Зы.. Я тебе в самом начале на это указал.


Почему же... в качестве разминки для ума и тренировки, очень полезное занятие.
Я вот всетаки хочу освоить Схему и не теряю надежды. А ты все обещаешь прокоментировать свой исходник и не делаешь этого
Давай попробуем сделать парсер для реального ini файла, например возьмем из папки windows какой нибудь файл настроек пожирнее и замутим универсальный парсер.
HiASM - это просто праздник какой-то!

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1310   2010-02-09 13:53 GMT+3 часа(ов)      
Я не твой препод, мне ты не платишь за обучение Поэтому учиться программировать придется самостоятельно. Парсер нужен тебе, я и так уже написал исходный каркас. Я вижу, что у тебя банальная нехватка знаний. Прежде чем я написал что-то полезное (т.е. для меня интересное), мне пришлось чуть больше месяца изучать литературу и анализировать примеры.

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

PS Я добавил к исходнику необходимые комментарии.

Pirr

Members


Статус

36 сообщений
http://hiasm.com
Где: Russia
Род занятий:
Возраст:

#1311   2010-02-09 14:02 GMT+3 часа(ов)      
Да, знаний действительно не хватает
И спросить не кого, вокруг ни одного программиста.
Программировать учусь для себя.
За коментарии спасибо (суховато, но пойдет).
HiASM - это просто праздник какой-то!

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1313   2010-02-09 14:18 GMT+3 часа(ов)      
А комменты, как раз самые необходимые. Ведь все сделано в лоб. т.е. исходник без изюминки и читается легко, если есть опыт

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1330   2010-02-10 16:14 GMT+3 часа(ов)      
Вчера обновил mutable-forth, переименовав его в Another-Mutable-Forth(am-4th). Если парсеры еще интересны, то можно посмотреть как там реализован лексер(next-word).

Михаил

Members


Статус

120 сообщений

Где: ---
Род занятий:
Возраст:

#1334   2010-02-10 17:38 GMT+3 часа(ов)      
>open-tcp-client
Gambit?
ФФФФУУУУУУУУУУ

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1335   2010-02-10 17:43 GMT+3 часа(ов)      
Это ж кто такой вумный? А пояснить!

Михаил

Members


Статус

120 сообщений

Где: ---
Род занятий:
Возраст:

#1362   2010-02-11 20:03 GMT+3 часа(ов)      
Это я кто? это ты - кто, епта.


Онлайн :

0 пользователь(ей), 15 гость(ей) :




Реклама на сайте: