문제

나는 나 자신을 가르치는 1 시간 1 일에 제도를 가르치고있다. 말할 것도없이, 나는 아무것도 이해하지 못한다. 그래서 나는 읽고있다 작은 계획서 그리고 이것을 사용하십시오 :

http://sisc-scheme.org/sisc-online.php

통역사로서.

사용해야합니다 ' 예를 들어

(atom? 'turkey)

"정의되지 않은 변수"오류를 피하려면 그만큼 ', 이 책에 따르면, 일반적인 LISP입니다.

두 가지 질문이 있습니다.

  1. 위에서 언급 한 통역사는 좋은 것입니까? 다른 추천 해 주시겠습니까? 잘 어울리는 하나가 필요합니다 작은 계획서.

  2. 무엇인가요 '?

도움이 되었습니까?

해결책

양식 'foo 단순히 특수 양식을 입력하는 더 빠른 방법입니다.

(quote foo)

즉, "Foo라는 이름을 평가하지 말고 그 값으로 바꾸지 마십시오. 나는 정말로 Foo라는 이름을 의미합니다."

SISC는 TLS의 연습을 탐색하는 데 완벽하다고 생각합니다.

다른 팁

체계의 기본 평가 규칙을 이해해야합니다.

첫 번째:

(atom? 'turkey)

목록은 기능 응용 프로그램입니다 atom? 함수로 평가됩니다.'turkey 짧은 손에 대한 표기법입니다 (quote turkey). 평가 (quote turkey) 기호를 제공합니다 turkey.

다음으로 기능이 기호에 적용됩니다 turkey 그리고 반품 값이 계산됩니다.

(atom? turkey)

다시 기능 응용 프로그램이 있습니다 atom? 함수로 평가됩니다. 이 시간 turkey 변수입니다. 평가 turkey 그것에 묶인 값을 제공합니다.

그러면 기능이 변수 값에 적용됩니다. turkey.

요약

turkey 변수는 그 가치로 평가됩니다. 'turkey ~이다 (quote turkey), 상징으로 평가됩니다 turkey.

계획은 S- 표현을 재사용하고 S- 표현으로 프로그램을 구축합니다. 이것은 언젠가 문제로 이어집니다 turkey 변수 여야하며 때로는 상징이어야합니다. 이것은 초보자에게 약간 혼란 스럽습니다. 얼마 후에는 그 뒤에있는 힘을 볼 수 있습니다.

SISC는 좋지만 더 가벼운 온라인 체계 집행 인은 http://codepad.org. 대화식이 아니라는 점에서 실제로 대체는 아니지만 꽤 가깝습니다. 제출 한 코드에서 실행됩니다 섬기는 사람 브라우저 애플릿을 사용하는 대신 측면. 짧은 URL로 실행중인 코드를 공유 할 수 있습니다.

그만큼 ~에 대한 CodePad의 페이지는 "MzScheme v372 [CGC]를 사용한다고 말합니다.

나는 모든 종류의 빠른 스 니펫 테스트에 CodePad를 사용합니다 (답변에 대한 코드 샘플을 포함).

견적 구문의 경우 차이점은 다음과 같은 코드를 사용하여 볼 수 있습니다.

(let ((x 5))
  (display x) (newline)
  (display 'x) (newline))

이것은 표시 :

5
x

첫 번째 경우, x 평가 및 전달됩니다 display, 두 번째 경우, 두 번째 경우에는 상징 x (캐릭터 문자열과 같은 것이 아닙니다)는 전달됩니다. display, 기호의 이름을 인쇄합니다.

속기 (quote ...), ' 코드를 데이터로 바꿉니다.

stuff 기호입니다. 그것은 변수의 이름 또는 함수 이름 등이 될 수 있음을 의미합니다.
'stuff 상징 "물건"자체를 제공합니다.

(dostuff "on" those 4 :parameters) 평가되면 기능이 실행됩니다 dostuff 문자열, 변수의 내용, 숫자 및 키워드의 네 가지 매개 변수로.
'(dostuff "on" those 4 :parameters) 평가가 위의 코드를 반환 할 때, 평가 될 때, 차례로 실행 함수 dostuff 그 네 가지 매개 변수로 ..

예 : 실행 '''somecode, 그것은 돌아옵니다 ''somecode. 운영 ''somecode, 그것은 돌아옵니다 'somecode. 운영 'somecode, 그것은 돌아옵니다 somecode. 운영 somecode, 그리고 ... 음 ... somecode 실행됩니다.

당신은 그렇게 말할 수 있습니다 ' 반대와 비슷합니다 (eval..).

(eval (eval (eval '''(print "hello")))) "안녕하세요"를 인쇄합니다.
(eval (eval (eval ''''(print "hello"))) - 하나 더 알아 차리십시오 ' 그 다음에 eval - 아무것도 인쇄하지 않지만 코드를 반환합니다. (print "hello") 그 자체!!

Lispers는 "코드"대신 반환 된 코드 (때로는 필기 코드) "목록"을 호출하는 경향이 있습니다. 행운을 빕니다 :)

  1. 나는 당신이 더 나은 환경으로 이동하는 것이 좋습니다. PLT 체계, IDE, 디버거 및 많은 라이브러리가 있습니다. 앞으로 나아가 더 큰 프로그램을 작성하기 시작하면 필요합니다.

  2. 단일 쿼트 특성은 "인용문"표현에 대한 구문 설탕이므로 터키는 (인용문)와 동일합니다. 기본적으로 "인용"이하는 일은 체계 평가자를 끄는 것입니다. 다시 말해, "인용"은 표현을 반환합니다. "견적"이 없다면, 계획은 현재 환경에서 "터키"를 평가하려고 시도합니다. 이것은 일반적인 LISP가 아니라 LISP입니다. 일반적인 LISP와 계획은 LISP의 두 가지 방언입니다. "인용문"의 사용은 모든 LISP 튜토리얼/서적에 설명되어 있습니다. 또한 답변을 참조하십시오 이 질문.

단일 쿼트 캐릭터는 속기있는 방법입니다 (QUOTE FOO).

그 문제에 대한 계획이나 LISP에서 실제로 기억해야 할 한 가지는 모든 것이 기본적으로 평가된다는 것입니다. 따라서 평가하고 싶지 않은 경우 이것을 앉을 방법이 필요합니다.

무언가를 인용하는 것은 이것을 수행하고 단일 쿼트는 타이핑이 줄어들 필요가 없으며 장황 코드가 줄어 듭니다.

당신이 최고의 IDE를 찾고 있다면 scheme 그럼 가십시오 Dr Racket. 그러나 시작할 때 Dr Racket 첫 번째 줄은 있어야합니다 #lang scheme ~부터 Dr Racket 우리가 사용할 언어를 명시 적으로 언급 한 언어가 많이 있습니다.

논쟁의 가치를 전달하는 대신 논쟁 자체를 통과하려면 인용문을 사용합니다. C 프로그래밍 언어로 사용할 수없는 목록, 쌍 및 원자를 사용하는 동안 통과하는 절차와 관련이 있습니다 (대부분의 사람들은 C 프로그래밍을 사용하여 프로그래밍을 시작하므로 혼란스러워) LISP의 방언 인 체계 프로그래밍 언어의 코드입니다. 이 코드를 이해할 수 있다고 생각합니다.

(define atom?              ; defining a procedure atom?
(lambda (x)              ; which as one argument x
(and (not (null? x)) (not(pair? x) )))) ; checks if the argument is atom or not
(atom? '(a b c)) ; since it is a list it is false #f

마지막 줄 (Atom? 'ABC)은 ABC가 원자인지 아닌지 확인하는 절차로 ABC를 전달하지만 (Atom? ABC) ABC의 값을 확인하고 값을 전달합니다. 그것. 우리는 그것에 어떤 가치도 제공하지 않았습니다

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