"call/cc"는 임의의 제어 흐름 구성을 구현하는 데 사용될 수 있으므로 "call/cc"를 사용하여 이러한 모든 구성을 구현하려고하지만 문제가 있습니다. "if"가 없다고 가정하면 "define-syntax"와 "call/cc"를 어떻게 사용합니까? 그럴 수 있습니까, 아니면 제가 잘못 인도 되었습니까? "call/cc"를 사용하여 무조건 점프를 구현하는 방법을 알고 있지만 기계 수준에서 조건부 실행은 프로세서의 상태 비트에 따라 실행되는 분기 명령으로 수행됩니다. 이 유형의 구조가 없으면 어떻게 할 수 있는지 보지 못합니다."call/cc"를 사용하여 "if"를 구현할 수 있습니까?
4
A
답변
7
당신은 할 수 없다 - 당신은 일부 어떤 것을 시험하고 그것이 진실인지 거짓인지에 따라 행동해야한다. 당신은 부울의 기능적 표현과 함께 가까이에 갈 수 있습니다. 예를 들어, 일반적인 교회 인코딩 :
(define (true x y) x)
(define (false x y) y)
을 지금 당신은 "성공"지속과 "실패"를 받아들이는 함수로 (이 인코딩 된 논리 값 중 하나를 반환) 시험을 고려 할 수 있습니다 계속하려면 사용 : 당신이 일을 썽크 필요하므로
(define (if c x y) (c x y))
이 실험 할 경우, 당신은, 계획은 게으른 언어 아니라는 사실을 고려해야합니다. 예를 들어 :
는(define (true x y) (x))
(define (false x y) (y))
(define-syntax if
[(if c x y) (c (lambda() x) (lambda() y))])
은 (하지만 당신은 여전히 이러한 논리 값을 반환하는 등 기존 조건을 수정해야합니다.) 자체 call/cc
정말 관련 아무것도하지 않는
어느 쪽이든을 ...
2
고차원 절차 만 사용하는 경우 을 구현할 수 있습니다. 이것은 명백한 창세자없는 교회 인코딩입니다 :
IF ? T E === (? (lambda() T) (lambda() F))
TRUE === (lambda (t _) (t))
FALSE === (lambda (_ f) (f))
당신은 전혀 계속할 필요가 없습니다. True는 첫 번째 인수를 실행하는 이진 함수입니다. False는 두 번째 인수를 실행하는 이진 함수입니다. If는 테스트 (?)에 의해 결정된 True/False를 얻음으로써 그것들을 함께 나열하고 그 결과를 지연시키는 두 가지 함수를 제공하는 삼항 함수입니다.
관련 문제
- 1. mapreduce를 사용하여 웹 서버를 구현할 수 있습니까?
- 2. Iterator를 사용하여 재귀 알고리즘을 구현할 수 있습니까?
- 3. NSString을 사용하여 NSArray를 구현할 수 있습니까?
- 4. REST를 사용하여 PHP로 EJB를 구현할 수 있습니까?
- 5. FQL을 사용하여 friends.getMutualFriends를 구현할 수 있습니까?
- 6. CompareExchange를 CompareAndSwap으로 구현할 수 있습니까?
- 7. 어떻게 FileTimeToSystemTime을 구현할 수 있습니까?
- 8. 자바에서 if를 사용하여 스위치를 만들려고 시도했습니다.
- 9. IF를 LINQ로 변환
- 10. C# app : JSON 인터페이스를 구현할 수 있습니까?
- 11. has_many, : through를 ActiveScaffold로 구현할 수 있습니까?
- 12. GenericServlet을 사용하여 Tomcat에 소켓 서버를 구현할 수 있습니까?
- 13. PHP preg_match_all을 사용하여 간단한 CFG 파서를 어떻게 구현할 수 있습니까?
- 14. .NET generics 클래스를 사용하여 COM 인터페이스를 구현할 수 있습니까?
- 15. 지연/힘을 사용하여 매크로가없는 경우에도 제어 구조를 구현할 수 있습니까?
- 16. LISP 프리미티브 만 사용하여 동시 루틴을 구현할 수 있습니까?
- 17. xcode를 사용하여 페이스 북에서 autoshare를 구현할 수 있습니까?
- 18. 젠드 API를 사용하여 PHP에서 php 추출 함수를 구현할 수 있습니까?
- 19. Python : Jinja2를 사용하여 DRY 방식으로 어떻게 구현할 수 있습니까?
- 20. std :: basic_string을 사용하여 길이 제한이있는 문자열을 구현할 수 있습니까?
- 21. jQuery를 사용하여 책의 페이지를 넘기는 효과를 구현할 수 있습니까?
- 22. 우리는 C#에서 인터페이스를 사용하여 다형성을 구현할 수 있습니까?
- 23. 잠금 기능을 사용하여 스레드 안전성 열거를 구현할 수 있습니까?
- 24. 인증서를 사용하여 PHP5에서 WS-Security 1.0을 어떻게 구현할 수 있습니까?
- 25. JavascriptMVC를 사용하여 실행 취소/다시 실행 엔진을 구현할 수 있습니까?
- 26. Blackberry Persistance 옵션을 사용하여 간단한 데이터베이스를 구현할 수 있습니까?
- 27. C# 확장 메서드를 사용하여 암시 적 변환을 구현할 수 있습니까?
- 28. 어떻게 jquery를 사용하여 상호 참조 공격을 구현할 수 있습니까?
- 29. IF를 SQL Server보기에서 사용
- 30. DisposeBase 추상 클래스를 구현할 수 있습니까?
나는 할 수 있다고 생각하지 않았다. 부울 값을 함수로 정의하면 부울 연산자가 다시 정의되어야하는 방식으로 언어의 의미를 변경합니다. Scheme에서 부울 값으로 간주 될 때 모든 함수가 false가 아니기 때문입니다. – N4tur41Myst1c
네, 그런 변화는 다른 언어로 이어질 것입니다 ... 그래서 나는 "할 수 없다"로 시작했습니다. –