2012-02-25 4 views
4

람다 미적분학에서 Y- 콤 바이 너는 다음과 같이 자신을 반환합니다. Y a = a Y a, 특히 here. y (x) = 2 * x + 1 (단순화를 위해 교회 번호를 가정)과 같은 사소한 기능을 가정 해보고 싶습니다. 예 y 내가 원하는 일종의 브레이크 아웃 기능 . 나는이R에 자신을 되 돌리는 함수?

  1. 계산 y를 같은 것을하고 싶어 (1) ---> 3
  2. 계산 y를 (3) ---> 7
  3. 계산 y를 (7) ...
  4. ...
  5. 내가 생각의 기능 방식을 사용하여 R에서이 작업을 수행 할 수있는 방법 n 번째의 경우

에 종료? 내장 된 것이 있습니까?

+0

'? Reduce'? –

답변

5

난 정말 람다 계산법의 표기법을 이해하지 않으므로 Y-콤비가 무엇인지 확실히 알 수는 없지만 궁금해 경우 R 기능 Recall()(help page here) 당신이 낳은 것을 지어줄 수는 없습니다. 그것은 당신이 설명하는 예에 적용되는

# Calculate 4! 
(function(n) {if (n<=1) 1 else n*Recall(n-1)})(4) 

그리고 여기에 : 여기 계승을 계산하기 위해 그 사용의 예입니다 그냥 기능, g을 원하는 경우에

(function(x, n) {if (n<=1) x else Recall(2*x+1, n-1)})(x=1, n=1) 
# [1] 1 
(function(x, n) {if (n<=1) x else Recall(2*x+1, n-1)})(x=1, n=2) 
# [1] 3 
(function(x, n) {if (n<=1) x else Recall(2*x+1, n-1)})(x=1, n=3) 
# [1] 7 
1

이 시도 :

myfun = function(x) { 2*x+1 } 

N = 10; seed = 3; i = 1 
for(i in 1:N){ 
    seed = Y = myfun(seed) 
    print(Y) 
} 
1

, 즉 함수를 변환 ffunction(x) f(f(f(f(...f(x))))) (n은 미리 알 수 없음) 인 경우 다음을 수행해야합니다.

compose_with_itself_n_times <- function(f,n) { 
    function(x) { 
    for(i in seq_len(n)) { 
     x <- f(x) 
    } 
    x 
    } 
} 
f <- function(x) 2*x+1 
g <- compose_with_itself_n_times(f,10) 
g(1) 
관련 문제