менее похож на пейджер для (swi) пролога - PullRequest
2 голосов
/ 20 ноября 2010

Типичным рабочим процессом в Unix является использование конвейера фильтров, заканчивающихся пейджером, например, less.Например, (пропуская аргументы)

grep | sed | awk | less

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

foo(X),bar(X, Y),qux(buz, Y).

Он с готовностью дает мне множество идей.Который может быть намного длиннее окна терминала.Или один запрос

give_me_long_list(X).

может дать очень длинный список, который снова не помещается на экране.Поэтому я постоянно нахожусь в ситуациях, когда мне хочется набрать |less в конце строки.

Я ищу средство, позволяющее открыть в пейджере набор решений или просто один большойсрок.Нечто похожее на:

give_me_long_list(X), pager(X).

или

pager([X,Y], (foo(X),bar(X, Y),qux(buz, Y))).

1 Ответ

0 голосов
/ 23 декабря 2010

Это не полное решение, но не будет ли довольно легко написать собственный предикат pager?Шаги:

  1. Создать временный файл

  2. dump X во временный файл с помощью этих или эти предикаты

    (я еще не произвел никаких операций ввода-вывода с Prolog, но это не выглядит слишком грязно)

  3. сделать системный вызов less <tempfile>

...