2010-11-19 3 views
2

Le flux de travail typique dans unix consiste à utiliser un pipeline de filtres se terminant par un pageur comme moins. Par exemple. (en omettant les arguments)pager moins semblable pour (swi) prolog

grep | sed | awk | less 

Maintenant, l'un des flux de travail typique dans la ligne de commande du SWI-Prolog lui demande de donner l'ensemble des solutions pour une conjonction donnée comme

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

Il me donne facilement l'ensemble des soutions. Ce qui peut être beaucoup plus long que la fenêtre du terminal. Ou une seule requête

give_me_long_list(X). 

peut donner une liste très longue à nouveau ne correspondant pas à l'écran. Donc je me retrouve constamment dans des situations où je veux gifler |less à la fin de la ligne.

Ce que je recherche est une facilité d'ouvrir dans un pager un ensemble de solutions ou juste un seul grand terme. Quelque chose de semblable à:

give_me_long_list(X), pager(X). 

ou

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

Qu'en est-il d'ajuster le terminal pour faire défiler? Habituellement, des centaines voire des milliers de lignes peuvent être dans le tampon de défilement. Prolog peut également être exécuté dans Emacs pour fournir un défilement illimité. Utilisez le mode Emacs * shell * ou une extension telle que [ediprolog] (http://www.logic.at/prolog/ediprolog/ediprolog.html). – frayser

+0

utiliser 'portray_clause' et le terminal pour se promener? –

Répondre

0

Ce n'est pas une solution complète, mais ne serait-il plutôt facile d'écrire votre propre prédicat pager? Étapes:

  1. Create temp file

  2. vidage X dans le fichier temporaire avec l'aide de these ou those prédicats

    (je n'ai pas fait encore d'E/S avec Prolog, mais il doesn « t semblent trop salissant)

  3. make a system call to less <tempfile>

Questions connexes