for 루프를 사용하여 for 루프를 재귀 함수 내부에서 구현하려고했습니다. 이미 구현 된 "for"를 라켓으로 사용하는 것은 허용되지 않습니다. 그러한 경우를 구현할 수있는 방법이 있습니까?라켓에 for 루프 구현
참고 : 동일한 중급 학생 언어를 사용하고 있습니다.
for 루프를 사용하여 for 루프를 재귀 함수 내부에서 구현하려고했습니다. 이미 구현 된 "for"를 라켓으로 사용하는 것은 허용되지 않습니다. 그러한 경우를 구현할 수있는 방법이 있습니까?라켓에 for 루프 구현
참고 : 동일한 중급 학생 언어를 사용하고 있습니다.
다음은 예입니다. squares
함수는 첫 번째 n
의 목록을 만듭니다. 그리스트를 생성하기 위해, 인덱스 i
을 사용하여 숫자 0, ..., n-1을 반복합니다.
(define (squares n)
(define (loop i)
(if (= i n)
'()
(cons (* i i) (loop (+ i 1)))))
(loop 0))
(squares 10)
먼저 오프 #lang racket
for
의 부작용 순수하다. 일반적으로 for/map
및 for/fold
과 같은 다른 변형이 결국 값을 생성하기를 원할 것입니다.
라켓은 Scheme의 자손이며, 모든 루핑은 재귀 함수가 적용되는 구문 당뿐입니다. 일례 do
루프로 :
(do ((vec (make-vector 5))
(i 0 (+ i 1)))
((= i 5) vec)
(vector-set! vec i i))
; ==> #(0 1 2 3 4)
실제로 언어는 원시적으로 do
이 없습니다.
(let loop ((vec (make-vector 5)) (i 0))
(if (= i 5)
vec
(begin
(vector-set! vec i i)
(loop vec (+ i 1)))))
이이 코스 바로 설탕이다 : 대신 구현은 보통이 (유사하거나 뭔가)로 만드는 매크로가
((letrec ((loop (lambda (vec i)
(if (= i 5)
vec
(begin
(vector-set! vec i i)
(loop vec (+ i 1)))))))
loop)
(make-vector 5) (i 0))
물론 letrec
의
lambda
을 사용합니다.
이 코드를 사용하면 다음과 같은 배열이 생깁니다. "define : 함수 본문에 대해 하나의 표현식이 필요 하나 추가 부분이 하나만 있습니다" – Deesha
Derik 교수 언어를 사용하는 경우 어느 언어를 지정해야합니다. – soegaard
내부 정의를 로컬로 감싸십시오. 로컬 사용 방법 조회. – soegaard