Size: a a a

2020 December 23

АВ

Андрей Вилинский... in F# Chat
habib sadullaev
лучше использовать
sepBy

. если нужно что-то свое, можно попробовать реализовать через
Inline.SepBy

или
Inline.Many

. ленивым парсер можно сделать через СЕ
parse

, ну, или
parse.Delay

, или
fun s -> f () s
sepBy же всеравно лист выдает, или имеется ввиду, что он не лук ахэд больше чем надо?
Inline.Many уже тоже нашел, но пока непонятно как Seq сделать. в примерах есть только ResizeArray, который у меня тоже взорвется на больших данных
источник

R

Roman in F# Chat
S B
а почему бесполезные?
а какой смысл делать их экземплярными? Они должны быть статическими, независимо от того, крепятся ли они к самой матрице или к типу 'T
источник

hs

habib sadullaev in F# Chat
источник

hs

habib sadullaev in F# Chat
а пример с использованием seq позже могу накидать (если получится, конечно)
источник

АВ

Андрей Вилинский... in F# Chat
вот такое накидал, еще не понял насколько это юзабельно, пушто это уже не Parser но первую десятку мессагов выдает:

    let inline manySeq (pelement: Parser<'a,'u>) = //: Parser<'a seq, 'u> =
       fun stream ->
           let rec loop stream =
               seq {
                   let reply = pelement stream
                   if reply.Status = Ok then
                       yield reply.Result
                       yield! loop stream
               }
           loop stream
источник

SB

S B in F# Chat
Roman
а какой смысл делать их экземплярными? Они должны быть статическими, независимо от того, крепятся ли они к самой матрице или к типу 'T
это пусть программист решает. тип (интерфейс) ничего не знает про организацию памяти, которая сложилась в силу исторических причин. я не вижу никакого смысла выносить в сущностное описание сути того, что такое "матрица" слово static.
источник

SB

S B in F# Chat
статические объекты - это в первую очередь оптимизация. во вторую очередь, синглтоны. но так-то синглотоны не обязательно связаны со словом static.
источник

SB

S B in F# Chat
Андрей Вилинский
вот такое накидал, еще не понял насколько это юзабельно, пушто это уже не Parser но первую десятку мессагов выдает:

    let inline manySeq (pelement: Parser<'a,'u>) = //: Parser<'a seq, 'u> =
       fun stream ->
           let rec loop stream =
               seq {
                   let reply = pelement stream
                   if reply.Status = Ok then
                       yield reply.Result
                       yield! loop stream
               }
           loop stream
а тебе надо чтобы ты вызвал этот парсер и он стримил результат по мере нахождения?
источник

АВ

Андрей Вилинский... in F# Chat
S B
а тебе надо чтобы ты вызвал этот парсер и он стримил результат по мере нахождения?
мне стрим сообщений нужен из файла, который не лезет в память
источник

АВ

Андрей Вилинский... in F# Chat
или из байтстрима из http
источник

VS

Vasily Shapenko in F# Chat
Маркеры начала/конца сообщения есть?
источник

АВ

Андрей Вилинский... in F# Chat
есть
источник

VS

Vasily Shapenko in F# Chat
Тогда не вижу проблемы
источник

VS

Vasily Shapenko in F# Chat
Если маркеры на уровне байтового массива
источник

VS

Vasily Shapenko in F# Chat
Т.е. если можно выделить сообщения до парсинга
источник

NK

ID:0 in F# Chat
источник

hs

habib sadullaev in F# Chat
Андрей Вилинский
sepBy же всеравно лист выдает, или имеется ввиду, что он не лук ахэд больше чем надо?
Inline.Many уже тоже нашел, но пока непонятно как Seq сделать. в примерах есть только ResizeArray, который у меня тоже взорвется на больших данных
как я понял, тебе нужно, что парсинг происходил лениво - так не получится сделать, парсер будет проходиться стрим до упора. нужно до парсинга делить на строки и потом их парсить @vilinski
источник

hs

habib sadullaev in F# Chat
Андрей Вилинский
вот такое накидал, еще не понял насколько это юзабельно, пушто это уже не Parser но первую десятку мессагов выдает:

    let inline manySeq (pelement: Parser<'a,'u>) = //: Parser<'a seq, 'u> =
       fun stream ->
           let rec loop stream =
               seq {
                   let reply = pelement stream
                   if reply.Status = Ok then
                       yield reply.Result
                       yield! loop stream
               }
           loop stream
а этот вариант сработает (просто осталось обернуть результат в Reply), только если не будет ошибок во входных данных
источник
2020 December 24

АВ

Андрей Вилинский... in F# Chat
habib sadullaev
а этот вариант сработает (просто осталось обернуть результат в Reply), только если не будет ошибок во входных данных
спасибо попробую... наверное уже в следующем году

ВСЕМ Frohe Weihnachten 🎁🎄!!!
источник

NK

ID:0 in F# Chat
источник