보편적 재귀 함수 의 짧은 명시 적 구성이 있습니까? 내가 본 모든 정의에는 어떤 방식 으로든 튜링 머신의 번호가 매겨져 있지만, 파이썬, 하스켈 등과 같은 고급 프로그래밍 언어로 작성하는 것은 어렵고 관리하기 어려운 것처럼 보입니다.
보편적 재귀 함수 의 짧은 명시 적 구성이 있습니까? 내가 본 모든 정의에는 어떤 방식 으로든 튜링 머신의 번호가 매겨져 있지만, 파이썬, 하스켈 등과 같은 고급 프로그래밍 언어로 작성하는 것은 어렵고 관리하기 어려운 것처럼 보입니다.
답변:
방법에 대한 맥카시의 원래 리스프 인터프리터 (원래 여기에 )? 그것은 보편적이며 자연스러운 인코딩 (Lisp AST)에서 작동하며 외부 인터프리터에 의존하지 않으며 약 20 줄입니다.
튜링이 완료된 언어에 대한 통역은 보편적 인 재귀 함수입니다. C ++ 또는 Python과 같은 고급 언어에 대한 인터프리터가 있습니다.
고델 넘버링은 존재하지만 내재적으로 존재합니다. 예를 들어, 재귀 함수를 계산하는 C ++ 코드 에 대한 색인입니다 .
범용 함수 u
는 Haskell과 같은 언어 (부작용, 고차 함수 없음)로 매우 쉽게 작성할 수 있습니다.
u f x = f x
이 함수 u
는 프로그램 f
과 입력 테이프를 (설명) 받아들이고 x
실행 결과를 알려 주기 때문에 보편적 f
입니다 x
.
이 답변이 완전히 심각하지는 않지만 Haskell과 같은 언어의 컴파일러 또는 인터프리터에는 이미 범용 함수에 필요한 모든 구성 요소가 포함되어 있음을 보여줍니다. 이야기의 교훈은 튜링 머신의 관점에서 범용 함수를 구현하는 것에 대해 걱정하는 것보다 컴파일러와 인터프리터의 작동 방식을 연구하는 데 시간이 더 걸린다는 것입니다.
u
함수를 사용합니다-고차 함수라고 부릅니다. u
정수 또는 일반 대수 데이터 유형을 사용 하고 싶습니다 . 인수 u
가 유형 인 한 특정 계산 모델을 강요하지 않습니다. 예를 들어 문자열에서 / 문자열로 직렬화 할 수 있습니다.
u
바이트의 유한 시퀀스 인 클로저를 사용합니다. 일반적인 utm 정리 에서조차 정수 u
는 함수를 나타냅니다.