LINUX.ORG.RU

[ленивые вычисления] Подскажите неучу


0

2

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

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

Как лучше?

★★★★★

Последнее исправление: ados (всего исправлений: 1)

С каких пор лисп - ленивый?

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

Deleted
()
Ответ на: комментарий от ados

Ты перепутал лисп с хаскелем, вот и всё.

Norgat ★★★★★
()
Ответ на: комментарий от buddhist

Scheme имеет начальную поддержку.

Можно пример?

Со схемой знаком на уровне нескольких первых глав сикпа.

Deleted
()
Ответ на: комментарий от Deleted

Ну вот, например, из «The Racket Reference»:

7.4 Lazy Data-structure Contracts

The generated contract combinators are lazy: they only verify the contract holds for the portion of some data structure that is actually inspected. More precisely, a lazy data structure contract is not checked until a selector extracts a field of a struct.

Сойдёт? :)

DeVliegendeHollander ★★
()
Ответ на: комментарий от Deleted

(delay выражение) — создает объект-обещание, не вычисляя выражение

(force обещание) — выполняет обещание.

Все остальное нужно реализовать самому :)

buddhist ★★★★★
()
Ответ на: комментарий от Deleted

Ну-у, началось... :) Ракет - не Схема, Схема - не Лисп и т.д. и.т.п. И я - не я, и кобыла - не моя. :)

Ну, почему, почему

Racket != Scheme.

?

Тогда что для тебя Scheme?

DeVliegendeHollander ★★
()
Ответ на: комментарий от Deleted

Нужны те — реализуйте сами с помощью delay и force. В сикпе, емнип, про это написано.

buddhist ★★★★★
()
Ответ на: комментарий от DeVliegendeHollander

Racket != Scheme

Это правда. За пояснениями — на racket-lang.org

buddhist ★★★★★
()
Ответ на: комментарий от DeVliegendeHollander

Ну, почему, почему

Racket != Scheme.

?

Хотя бы потому, что так считают сами разработчики Racket ( http://docs.racket-lang.org/guide/intro.html ). И многие фичи Racket отсутствуют в большинстве реализаций Scheme.

Тогда что для тебя Scheme?

MIT Scheme, Guile и прочие.

Deleted
()
Ответ на: комментарий от Begemoth

Ок, ок, Буддист, Роман и Бегемот - три удара - три нокаута. Лежу, не рыпаюсь. Жду носилки...

DeVliegendeHollander ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.