Pergunta

Eu quero carregar algo simples no meu editor:

Write:-repeat,write("hi"),nl,fail.

Para que imprima "oi".

O que devo fazer?

Atualmente estou tentando fazer File->New

e salvar um arquivo chamado Write em E:\Program Files\pl\xpce\prolog\lib

Ao fazer a consulta:

?-Escreva.

É impressão:

1 ?- Write.
% ... 1,000,000 ............ 10,000,000 years later
% 
%       >> 42 << (last release gives the question)

Por quê?

Foi útil?

Solução

EDITAR

Eu fiz mais algumas pesquisas. Aparentemente, é isso que o SWI-Prolog faz quando você pergunta sobre uma variável desinstaliada.

$ prolog
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.6.64)
Copyright (c) 1990-2008 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- X.
% ... 1,000,000 ............ 10,000,000 years later
% 
%       >> 42 << (last release gives the question)
?- 

ATUALIZAR

Alterando o nome para trabalhos minúsculos. OUPERCASE é para variáveis:

helloworld.prolog:

helloworld:-write('Hello World!'),nl,fail.

Então:

$ prolog
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.6.64)
Copyright (c) 1990-2008 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- ['helloworld.prolog'].
% helloworld.prolog compiled 0.00 sec, 1,376 bytes
true.

?- helloworld.
Hello World!
false.

?- 

Observe que você deve consultar o arquivo primeiro. Eu tentei isso e funciona com certeza.

Outras dicas

Você precisa nomear o procedimento write, não Write. As letras iniciais da caixa superior são para variáveis. (Pode ser menos confuso se você chamá -lo de outra coisa como writeHi Ou algo assim, então não tem o mesmo nome que um procedimento embutido, mas ainda funcionará quando você chama write Porque sua gravação tem uma arity diferente da de uma).

Também você pode querer substituir "hi" com 'hi', embora funcione de qualquer maneira (mas apenas a segunda versão imprimirá a palavra HI na tela - sua versão a imprimirá como uma lista inteira).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top