문제

Haskell과 Lambda Calculus의 Python 코드는 무엇입니까?

def f1():
   x = 77
   def f2():
      print x
   f2
f1

람다 미적분학에서의 나의 시도

\x. 77 (\x.x)
도움이 되었습니까?

해결책

Haskell :

f1 :: IO ()
f1 = let x = 77
         f2 = print x
     in f2

main :: IO ()
main = f1

또는 당신의 람다 미적분학처럼 :

f1 :: Int
f1 = let f2 = x
         x = 77
     in f2

main :: IO ()
main = print f1

다른 팁

Haskell에서 :

f1 = f2
    where x  = 77
          f2 = print x

리팩토링, IO는 문제를 혼동하기 때문에 다음과 같습니다.

f1 = f2
    where x  = 77
          f2 = x

리팩토링 :

f1 = x
    where x = 77

변수를 원하기 때문에 리팩토링?

f1 = (\x -> x) 77

베타 감소 :

f1 = 77

그리고 당신은 당신의 프로그램이 Haskell에 있습니다.

Lambda 미적분학은 숫자 리터럴이 없습니다 (Haskell과 달리) 교회 숫자. 람다 미적분학에 "77"을 컴파일하는 것 :

f1 = \f.\x. f (f (f (f ( ... ) x)))

Lambda Calculus에는 Python 프로그램이 있습니다.

나는 Python을 모르기 때문에 완전히 잘못 될 수 있지만 이것은 나의 Haskell 해석입니다.

f1 = let x = 77 in show x

또는 당신은 거기에 일정이 있기 때문에

f1 = show 77

람다 미적분학 :

λprint. print 77
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top