2011-02-27 3 views
4

CBN (call-by-need) 및 CBV (call-by-value) 평가 전략을 모두 제공하는 것이 좋습니까? 나는 그것을 고치지 않고 하나를 다른 것에서 시뮬레이트하지만 사용자가 필요할 때 선택할 수있게 해줍니다. 예를 들어 언어에 기능이 있습니다 (Scheme available). 사용자가 원하는 평가 전략을 지정하는 인수를 하나 더 받아 들일 수 있습니다.언어를 사용하여 이름별로 통화와 가치에 의한 통화를 제공하는 것은 어떻습니까?

+1

비록 대답을 제공했지만 stackoverflow로 마이그레이션하면이 질문이 더 많은 답변을 얻을 수 있다고 생각합니다. @plmday에 대해 어떻게 생각하십니까? –

+0

고마워, Dave. 좋은 생각이야. – day

+0

불행히도, 아직 결과를 얻지 못했습니다. –

답변

6

부작용이있는 계산을 피하고 발산 계산을 엄격하게하는 것을 피하는 한, 한 언어 구현에서 필요에 따른 호출 (laziness)과 call-by-value (strictness)를 결합하는 것이 가능합니다.

은 지연 기능 (CBN) 기능 언어에서 기능이 CBV 전략을 사용하여 안전하게 평가 될 수 있는지를 감지하는 데 사용됩니다. CBV 평가는 일반적으로 더 빠르지 만 엄격하지 않은 함수에 대해이 평가 전략을 사용하면 프로그램의 의미가 변경됩니다.

Wadler은 기능적 언어로 게으른 계산과 엄격한 계산을 결합하는 방법을 설명합니다.

람다 궁극적 인 thread도 문제를 해결합니다.

Scala에는 특정 계산이 느리게 수행됨을 나타내는 키워드 lazy이 있습니다. 다른 언어도 비슷한 구조를 가지고 있습니다.

관련 문제