UFO ET IT

Scheme 또는 일반적으로 사용되는 'thunk'는 무엇입니까?

ufoet 2020. 12. 29. 07:36
반응형

Scheme 또는 일반적으로 사용되는 'thunk'는 무엇입니까?


저는 Scheme과 관련된 코드와 문서, 그리고 유사한 영역에서 많은 곳에서 'thunk'라는 단어를 발견했습니다. 하나의 형식적인 인수를 갖는 프로 시저의 일반적인 이름이라고 생각합니다. 그 맞습니까? 그렇다면 더 많은 것이 있습니까? 아니라면 제발?

예를 들어. 에서 SRFI (18) 의 '절차'섹션이다.


정말 간단합니다. 프로그램에서 3에서 5를 더하는 것과 같은 계산이있을 때 그 덩어리를 만드는 것은 직접 계산 하지 않고 대신 실제 값이 필요할 때 계산할 인수가없는 함수를 만드는 것을 의미 합니다.

(let ((foo (+ 3 5))) ; the calculation is performed directly, foo is 8
  ;; some other things
  (display foo)) ; foo is evaluated to 8 and printed

(let ((foo (lambda () (+ 3 5)))) ; the calculation is delayed, foo is a
                                 ; function that will perform it when needed
  ;; some other things
  (display (foo))) ; foo is evaluated as a function, returns 8 which is printed

두 번째 경우 foo에는 썽크라고합니다.

게으른 언어는 변수를 값에 바인딩하는 것과 그 값을 반환하는 함수를 만드는 것 사이의 경계를 모호하게하므로 위의 첫 번째 형식과 같은 것을 작성하는 것은 실제로 두 번째 형식과 같이 내부적으로 처리됩니다.


"thunk"는 공식 인수가없는 프로 시저 객체입니다 (예 : SRFI 링크).

(lambda () (write '(b1)))

b1 변수는 둘러싸는 블록에 묶여 있으며, 이는 잘못된 문법에 대한 농담에 의존하는 "thunk"라는 단어의 어원에 대한 단서를 제공합니다.

인수가없는 함수는 매개 변수가 없기 때문에 호출 된 매개 변수에 따라 동작을 변경할 방법이 없습니다. 따라서 함수의 전체 작동이 설정됩니다. 실행을 기다리고 있습니다. 컴퓨터에서 더 이상 "생각"할 필요가 없으며 모든 "생각"이 완료되었습니다. 작업은 완전히 "생각"됩니다.

이 SRFI의 컨텍스트에는 인수가없는 프로 시저 인 "thunk"가 전부입니다.


Wikipedia 에는 다음과 같은 답변이 있습니다.

함수형 프로그래밍에서 "thunk"는 인수가없는 함수 인 nullary 함수의 또 다른 이름입니다. Thunk는 지연 평가를 시뮬레이션하는 수단으로 엄격한 언어로 자주 사용됩니다. 썽크 자체는 함수의 인수 계산을 지연시키고 함수는 썽크가 실제 값을 얻도록합니다. 이러한 맥락에서 썽 크는 종종 일시 중단 또는 (Scheme에서) 약속이라고합니다.

Scheme에 게으른 평가 예제 추가 . 여기서 약속은 썽크에 대한 또 다른 단어입니다.

참조 URL : https://stackoverflow.com/questions/925365/what-is-a-thunk-as-used-in-scheme-or-in-general

반응형