我正在努力改进功能编程。作为一个开始,我打算尝试使用Pascal,Scheme,ML等几种语言。首先我开始使用Pascal。我试图将用户输入插入到pascal中的整数数组中,然后将它们反转。
1 program ReverseList;
2
3 var
4 i: Integer;
5 k: Integer;
6 a: array[1..100] of Integer;
7 begin
8 i := 0;
9 repeat
10 writeln('Enter a number');
11 readln(k);
12 if k > -1 then
13 i := i + 1;
14 a[i] := k;
15 until(k < 0);
16 for i := 1 to i do
17 writeln(a[i]);
18 end.
过去我主要是一个java开发人员,所以我很自定,使用所有可用的列表。理想情况下,我想知道是否可以构建一个列表,我可以根据该列表中的元素数量迭代列表。
如果有人能指出我在函数式编程方面的优秀教程以及上述编程语言的语法,那将是很棒的。
答案 0 :(得分:2)
您的计划有几个问题:
还有几个pascal tutorials。
顺便说一下,Pascal不是一种功能语言。因此,如果您真的想学习一种函数式语言,最好再试一次(比如Lisp,Ml或者可能是F#)。
答案 1 :(得分:0)
这是一个很好的做法,我设法为此找到了解决方案。我确信有更好的方法,而且这看起来并不像我正在使用函数式编程的功能。但如果有人想提供更好的解决方案,请这样做,
{author: Null-Hypothesis}
program ReverseList;
var
i: Integer; {integer to keep the array length}
k: Integer; {user input value}
a: array[1..100] of Integer; {array to store the user inputs}
begin
i := 0;
repeat {iterate until user input is negative or number of inputs exceed array size}
writeln('Enter a number or enter negative value to exit the program.');
readln(k);
if(k > -1) and (i < 100) then {check for negative value and size of the array}
begin
i := i + 1; {increase array index}
a[i] := k {assign value to array}
end
else
break; {exit if array size exceed the limit of array}
until(k < 0);
writeln;
{Printing the user input before the reversing the list}
writeln('Original order of the list');
for i := 1 to i do
writeln(a[i]);
writeln;
{Printing the reverse list}
writeln('Reversed List');
for i := i downto 1 do {decrement array index}
writeln(a[i]);
writeln('Bye!!!');
end.
快乐编码,接下来的语言......