Scheme, 누군가 내가 세트 카를 사용하는 방법을 설명 할 수 있습니까! 잘못된?

네오

나는리스트의 홀수를 파괴적으로 증가시키는 절차를 만들고 싶었다. 나는 그것을 통해 재귀하고 그냥 'set-car!'를 사용한다고 생각했습니다. '이상한'때마다 사실이었다.

다음은 코드입니다.

   (define (test lst)
  (cond ((null? lst) lst)
        ((odd? (car lst)) (set-car! lst (+ (car lst) 1))
                            (test (cdr lst)))
        (else (test (cdr lst)))))

왜 작동하지 않는지 모르겠지만 세트 카를 이해하지 못하는 것 같아요! 그리고 set-cdr! 누군가 설명 할 수 있습니까? 감사합니다.

오스카 로페즈

인터프리터 나 프로 시저를 정의하는 언어 또는 호출 방식에 문제가있을 수 있습니다. 예를 들어 DrRacket에서는 다음과 같이 잘 작동합니다.

#lang r5rs

(define (test lst)
  (cond ((null? lst) lst) ; this is the '() returned by the recursion
        ((odd? (car lst)) (set-car! lst (+ (car lst) 1))
                          (test (cdr lst)))
        (else (test (cdr lst)))))

당신의 프로시 저는 빈 list 를 반환 할 것이라는 점을 명심하십시오. 이것이 재귀의 기본 케이스이고 이것은 최종 결과로 기본 케이스의 값을 리턴하는 tail-recursive 프로 시저이기 때문입니다. 그러나 걱정하지 마십시오. 입력 목록이 제자리에서 수정되었으므로 프로 시저가 값을 반환 한 후에 확인할 수 있습니다.

(define lst (list 1 2 3 4))
(display (test lst))
=> ()
(display lst)
=> (2 2 4 4)

가변성이 얼마나 혼란 스럽습니까? 프로 시저가 하나의 값을 리턴하지만 입력이 수정되어 현재 다른 값을 갖습니다. 이것이 (불변 데이터를 선호하는) 함수형 프로그래밍이 더 명확하고 이해하기 쉬운 이유 중 하나이며, 프로 시저 내에서 입력 매개 변수를 변경하는 것이 왜 나쁜 생각인지 보여줍니다.)

프로 시저 변경된 목록을 반환하기를 절대적으로 원한다면 @ sepp2k가 제안한대로 수행하십시오. 그러나 입력 목록 수정되었으며 실제로 결과로 반환되는 것과 동일한 목록임을 기억하십시오 .

(define (test lst)
  (cond ((null? lst) lst)
        ((odd? (car lst)) (set-car! lst (+ (car lst) 1))
                          (test (cdr lst))
                          lst) ; add this line
        (else (test (cdr lst)))))

직접 확인 :

(define lst (list 1 2 3 4))
(display (test lst))
=> (2 2 4 4)
(display lst)
=> (2 2 4 4)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

누군가 str.index 및 str.find를 사용하는 방법과 다음 코드가 잘못된 이유를 설명 할 수 있습니까?

분류에서Dev

누군가 내 for 루프가 잘못된 위치에서 멈추는 이유를 설명 할 수 있습니까?

분류에서Dev

누군가 eclipse Java 프로젝트의 .settings 폴더에 포함 된 내용을 설명 할 수 있습니까?

분류에서Dev

누군가 selectionDirection을 더 잘 설명 할 수 있습니까?

분류에서Dev

누군가 내 서버 / 클라이언트가 연결을 설정하는 방식으로 작동하지 않는 이유를 설명 할 수 있습니까?

분류에서Dev

누군가 내 함수가 1 대신 0을 반환하는 이유를 설명 할 수 있습니까?

분류에서Dev

누군가 중력의 가치를 실험하는 방법을 설명 할 수 있습니까?

분류에서Dev

이 진술이 잘못된 이유는 무엇입니까? 누군가 설명 할 수 있습니까

분류에서Dev

누군가이 전달 된 함수가 반환되고 호출되는 방법을 설명 할 수 있습니까? -자바 스크립트

분류에서Dev

누군가 repr 함수를 사용하여 출력 형식을 지정하는 방법을 설명 할 수 있습니까?

분류에서Dev

누군가 내 cmd 출력을 설명 할 수 있습니까?

분류에서Dev

누군가 Heroku toolbelt를 설치하는이 wget 명령의 기능을 설명 할 수 있습니까?

분류에서Dev

누군가 Heroku toolbelt를 설치하는이 wget 명령의 기능을 설명 할 수 있습니까?

분류에서Dev

누군가 사용자 입력으로 줄 수를 저장하고 표시하는 방법을 설명 할 수 있습니까?

분류에서Dev

스레드 인터럽트. 누군가 인터럽트를 더 잘 이해하기 위해 출력을 설명 할 수 있습니까?

분류에서Dev

누군가 내 코드에 무엇이 잘못되었는지 설명 할 수 있습니까?

분류에서Dev

누구든지 내 날짜 함수가 JS 날짜 개체를 통해 잘못된 변환을 제공하는 이유를 설명 할 수 있습니까?

분류에서Dev

누군가 Python List의 모든 요소를 대문자로 사용하는 방법을 설명 할 수 있습니까?

분류에서Dev

누군가 2 배열을 비교하려는 내 코드에 무엇이 잘못되었는지 설명 할 수 있습니까?

분류에서Dev

누군가 "set -m"의 기능을 자세히 설명 할 수 있습니까?

분류에서Dev

누군가가 JS / jQuery로 그리드를 생성하는이 기능을 설명 할 수 있습니까?

분류에서Dev

누군가 이것이 왜 서명되지 않은 정수에서 세트 비트를 계산하는 데 작동하는지 설명 할 수 있습니까?

분류에서Dev

나는 자바 스크립트 (밑줄 용)로 메모를 다시 작성하려고하는데 누군가 이것을 설명 할 수 있습니까?

분류에서Dev

누군가가 int로 변환하고 Read 대신 read line을 사용하여 내 문제를 해결 한 이유를 설명 할 수 있습니까?

분류에서Dev

EaselJS : 누군가 데모에 사용 된 상속 패턴을 설명 할 수 있습니까?

분류에서Dev

누군가이 변화하는 'du'출력을 설명 할 수 있습니까?

분류에서Dev

누군가 중첩 된 데이터 구조를 반복하는이 방법이 작동하는 이유를 설명 할 수 있습니까?

분류에서Dev

누군가 내 코드의 문제점을 설명하고 설명 할 수 있습니까?

분류에서Dev

누군가이 난독 화 된 펄 정규 표현식 스크립트를 설명 할 수 있습니까?

Related 관련 기사

  1. 1

    누군가 str.index 및 str.find를 사용하는 방법과 다음 코드가 잘못된 이유를 설명 할 수 있습니까?

  2. 2

    누군가 내 for 루프가 잘못된 위치에서 멈추는 이유를 설명 할 수 있습니까?

  3. 3

    누군가 eclipse Java 프로젝트의 .settings 폴더에 포함 된 내용을 설명 할 수 있습니까?

  4. 4

    누군가 selectionDirection을 더 잘 설명 할 수 있습니까?

  5. 5

    누군가 내 서버 / 클라이언트가 연결을 설정하는 방식으로 작동하지 않는 이유를 설명 할 수 있습니까?

  6. 6

    누군가 내 함수가 1 대신 0을 반환하는 이유를 설명 할 수 있습니까?

  7. 7

    누군가 중력의 가치를 실험하는 방법을 설명 할 수 있습니까?

  8. 8

    이 진술이 잘못된 이유는 무엇입니까? 누군가 설명 할 수 있습니까

  9. 9

    누군가이 전달 된 함수가 반환되고 호출되는 방법을 설명 할 수 있습니까? -자바 스크립트

  10. 10

    누군가 repr 함수를 사용하여 출력 형식을 지정하는 방법을 설명 할 수 있습니까?

  11. 11

    누군가 내 cmd 출력을 설명 할 수 있습니까?

  12. 12

    누군가 Heroku toolbelt를 설치하는이 wget 명령의 기능을 설명 할 수 있습니까?

  13. 13

    누군가 Heroku toolbelt를 설치하는이 wget 명령의 기능을 설명 할 수 있습니까?

  14. 14

    누군가 사용자 입력으로 줄 수를 저장하고 표시하는 방법을 설명 할 수 있습니까?

  15. 15

    스레드 인터럽트. 누군가 인터럽트를 더 잘 이해하기 위해 출력을 설명 할 수 있습니까?

  16. 16

    누군가 내 코드에 무엇이 잘못되었는지 설명 할 수 있습니까?

  17. 17

    누구든지 내 날짜 함수가 JS 날짜 개체를 통해 잘못된 변환을 제공하는 이유를 설명 할 수 있습니까?

  18. 18

    누군가 Python List의 모든 요소를 대문자로 사용하는 방법을 설명 할 수 있습니까?

  19. 19

    누군가 2 배열을 비교하려는 내 코드에 무엇이 잘못되었는지 설명 할 수 있습니까?

  20. 20

    누군가 "set -m"의 기능을 자세히 설명 할 수 있습니까?

  21. 21

    누군가가 JS / jQuery로 그리드를 생성하는이 기능을 설명 할 수 있습니까?

  22. 22

    누군가 이것이 왜 서명되지 않은 정수에서 세트 비트를 계산하는 데 작동하는지 설명 할 수 있습니까?

  23. 23

    나는 자바 스크립트 (밑줄 용)로 메모를 다시 작성하려고하는데 누군가 이것을 설명 할 수 있습니까?

  24. 24

    누군가가 int로 변환하고 Read 대신 read line을 사용하여 내 문제를 해결 한 이유를 설명 할 수 있습니까?

  25. 25

    EaselJS : 누군가 데모에 사용 된 상속 패턴을 설명 할 수 있습니까?

  26. 26

    누군가이 변화하는 'du'출력을 설명 할 수 있습니까?

  27. 27

    누군가 중첩 된 데이터 구조를 반복하는이 방법이 작동하는 이유를 설명 할 수 있습니까?

  28. 28

    누군가 내 코드의 문제점을 설명하고 설명 할 수 있습니까?

  29. 29

    누군가이 난독 화 된 펄 정규 표현식 스크립트를 설명 할 수 있습니까?

뜨겁다태그

보관