2013-02-21 4 views
0

질문에서 알 수 있듯이 사용자 목록을 사용하여 목록의 목록에서 요소를 제거하려고합니다. 목록 형식이 이와 같이 지정됩니다. '((X X X) (X X X X) (X X)) 각 하위 목록에는 임의의 양의 X가 들어 있습니다.라켓의 사용자 선택에 따라 목록 목록에서 요소 제거

사용자는 각 하위 목록에 대해 1,2,3, ...을 선택합니다. 따라서 사용자가 1을 입력하면 하위 목록 '(X X X)이 선택됩니다. 그런 다음 사용자는 제거 할 요소 수를 선택합니다.

내가 현재 가지고있는 코드는 다음과 같습니다.

(define (humanTurn rows player playerNumber) 
    (drawBoard (with-handlers ([exn:fail? 
            (lambda (exn) 
             (display 
              "ILLEGAL MOVE, PLEASE ENTER A VALID NUMBER\n"))]) 
           (getRowAndSticks rows)) 
       (list (first (rest player)) (first player)) 
       (cond [(equals? playerNumber 1) 2] 
        [(equals? playerNumber 2) 1] 
        [else "error"]))) 

(define (getRowAndSticks rows) 
    (list-tail (list-ref rows (sub1 (getRow))) 
       (begin 
        (display "How many sticks:........ ") 
        (read)))) 

(define (getRow) 
    (display "Which row do you choose: ") 
    (read)) 

문제는 내가 목록을 다시 추가하는 방법을 알 수 없다는 것입니다. 나는 그 요소들을 제거한 목록을 얻을 수 있었다. 변수를 사용할 수 없기 때문에 어떤 해결책도 보이지 않습니다.

+0

CSM에서 일부 CS400으로 작업하고 있습니까? – zanegray

+0

예 ... 15 시간 동안 계속 작업 해 왔습니다. – snowe

+0

코드 규칙이 스키마 규칙과 일치하도록 수정했습니다. 제가 의미를 바꾸지 않았는지 확인하십시오. – yarian

답변

0

코드를 수행하는 데 어려움을 겪고 있지만 목록을 다시 결합하려면 list 함수 또는 list* 함수를 사용하십시오. 둘 사이의 차이점은 후자가 마지막에 언급 된 것을 제외하고 모든 인수 목록을 작성한다는 점입니다.

+0

문제는 주요 목록의 시작과 끝을 얻는 방법을 알 수 없었습니다. 나는 목록을 뒤집어 그것을 꼬리로 만든 다음 마침내 되돌려 놓았습니다. 그것을 추가 한 다음 고정 된 하위 목록을 추가 한 다음 끝에 동일한 작업을 수행합니다. 하지만 지금은 처리자가 처리를 못하고 질문을 반복하기 때문에 멈추었습니다. 하지만 그것은 또 다른 문제입니다. \ – snowe

관련 문제