在方案中的新行中打印每个数字
Printing each number in new line in Scheme
我需要帮助将此 Pascal 代码转换为 Scheme 代码:
program reverseorder;
type
arraytype = array [1..5] of integer;
var
arr:arraytype;
i:integer;
begin
for i:=1 to 5 do
arr[i]:=i;
for i:=5 downto 1 do
writeln(arr[i]);
end.
我想访问一个特定的原子,它似乎在 Scheme 中没有迭代方法。
有很多方法可以解决这个问题。使用您正在使用的在线解释器,您将仅限于香草方案,并且解决方案将比需要的更冗长,使用递归:
(define lst '(1 2 3 4 5))
(let loop ((rev (reverse lst)))
(when (not (null? rev))
(display (car rev))
(newline)
(loop (cdr rev))))
使用针对初学者的 Racket,您可以编写一个更简单(尽管非标准)的解决方案:
(define lst (range 1 6))
(for ([e (reverse lst)])
(displayln e))
无论哪种方式,请注意,反转列表的过程已经内置在该语言中,您不需要重新实现它 - 自然地,它被称为 reverse
。如果不是很明显,在 Scheme 中我们更喜欢使用 lists,而不是数组来表示元素序列——建议停止考虑索引、数组长度等. 因为这不是 Scheme 中的处理方式。
如果您不关心返回值(它是 #<undef>
)而只想产生输出,您可以使用 for-each
:
(for-each print (reverse (list 1 2 3 4 5)))
Output:
5
4
3
2
1
不是惯用的 Scheme,而是 Pascal 代码的直译:
(let ([arr (make-vector 5)])
(do ([i 0 (+ i 1)]) ((= i 5)) (vector-set! arr i i))
(do ([i 4 (- i 1)]) ((negative? i))
(display (vector-ref arr i))
(newline)))
我需要帮助将此 Pascal 代码转换为 Scheme 代码:
program reverseorder;
type
arraytype = array [1..5] of integer;
var
arr:arraytype;
i:integer;
begin
for i:=1 to 5 do
arr[i]:=i;
for i:=5 downto 1 do
writeln(arr[i]);
end.
我想访问一个特定的原子,它似乎在 Scheme 中没有迭代方法。
有很多方法可以解决这个问题。使用您正在使用的在线解释器,您将仅限于香草方案,并且解决方案将比需要的更冗长,使用递归:
(define lst '(1 2 3 4 5))
(let loop ((rev (reverse lst)))
(when (not (null? rev))
(display (car rev))
(newline)
(loop (cdr rev))))
使用针对初学者的 Racket,您可以编写一个更简单(尽管非标准)的解决方案:
(define lst (range 1 6))
(for ([e (reverse lst)])
(displayln e))
无论哪种方式,请注意,反转列表的过程已经内置在该语言中,您不需要重新实现它 - 自然地,它被称为 reverse
。如果不是很明显,在 Scheme 中我们更喜欢使用 lists,而不是数组来表示元素序列——建议停止考虑索引、数组长度等. 因为这不是 Scheme 中的处理方式。
如果您不关心返回值(它是 #<undef>
)而只想产生输出,您可以使用 for-each
:
(for-each print (reverse (list 1 2 3 4 5)))
Output:
5
4
3
2
1
不是惯用的 Scheme,而是 Pascal 代码的直译:
(let ([arr (make-vector 5)])
(do ([i 0 (+ i 1)]) ((= i 5)) (vector-set! arr i i))
(do ([i 4 (- i 1)]) ((negative? i))
(display (vector-ref arr i))
(newline)))