thoga31 Posted March 24, 2012 at 07:43 PM Report #445490 Posted March 24, 2012 at 07:43 PM Olá pessoal. Desta vez venho esclarecer uma pequena questão que me surgiu. Num manual antigo que tenho sobre Pascal (aka 1994) existe na secção de procedimentos e funções a referência a uma funcionalidade muito fixe que desconhecia e que hoje decidi experimentar. A ideia é simples: os argumentos de funções e procedimentos poderiam ser, igualmente, funções ou procedimentos. Exemplo: PROGRAM exemplo; FUNCTION Cubo(n : real) : real; begin Cubo := SQR(n) * n; end; FUNCTION Simples(n : real) : real; begin Simples := n; end; FUNCTION Soma(a, b : real; FUNCTION f(n : real) : real) : real; (* Soma a e b realizando uma modificação no b segundo a função f *) begin Soma := a + f(b); end; BEGIN writeln('Soma de 2 e 3, com 3 modificado: ', Soma(2, 3, Cubo) : 5:2); writeln('Soma de 2 e 3, sem modificacoes: ', Soma(2, 3, Simples) : 5:2); readln; // pausa END. O meu problema é que o Free Pascal não está a aceitar isto. O erro é simples. "Identifier expected but FUNCTION found". O livro está escrito para a utilização do ANSI Pascal, e com notas para algumas alterações a fazer para o Turbo Pascal. Nesta parte não são referidas mudanças necessárias. Isto ainda é possível de se fazer ou já só com um compilador antiquíssimo? Haverá alguma compiler directive que me meta isto a funcionar? Cumprimentos, thoga31 👍 Knowledge is free!
bsccara Posted March 24, 2012 at 08:00 PM Report #445496 Posted March 24, 2012 at 08:00 PM O FreePascal compila ObjectPascal, o dialeto do Delphi. Assim deves fazer : type TFuncao = function(const valor : integer) : string; function funcao(const valor : integer) : string; begin Result := IntToStr(value); end; function Dinamica(f : TFuncao) : string; begin Result := f(2006) ; end; begin writeln(Dinamica(funcao)); end.
thoga31 Posted March 25, 2012 at 09:08 PM Author Report #445630 Posted March 25, 2012 at 09:08 PM Obrigado, @bsccara. 😄 Knowledge is free!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now