2017-05-22 1 views
0

나는 마지막 항목을 제외하고는 목록에있는 모든 항목을 원래 상태로 반환한다고 전했다. 여기에 수동으로 입력 해보십시오 내 출력의 사진의 다음 list.I이 문서를 온라인에 발견에서 우리는 마지막 항목을 제거하기 때문에 출력은 '로 (1 2)했는데DrRacket이 버스트를 인식하지 않는 이유는 무엇입니까?

enter image description here

은 butlast하지만 나는 왜 명령이 나를 위해 일하지 않는지 모르겠다. https://planet.racket-lang.org/package-source/cce/dracula.plt/6/0/planet-docs/manual/Lists.html#(def._((planet.dracula..scm.(cce._dracula..plt._6._0)._language)._butlast))

+0

합니다. Dracula 언어를 사용하려는 의도입니까, 아니면 Racket 언어에서 비슷한 기능을 찾고 계십니까? DrRacket은 다중 언어 구현이므로'#lang racket '과 함께 사용하면 해당 언어의 기능 만 사용할 수 있습니다. – Sylwester

답변

1

참조한 문서는 ACL2 프로그래밍 언어에 속하며, 여기서 butlast은 잘 정의 된 내장 프로 시저입니다.

그러나 Racket에는 butlast이라는 기본 제공 절차가 없습니다. 이것을 확인할 수있는 라켓의 공식 문서는 https://docs.racket-lang.org/입니다. 프로 시저가 내장되어 있지 않거나 사용자가 정의한 프로 시저가 아니기 때문에 함수를 적용 할 때 오류 butlast: undefined;이 표시됩니다.

라켓에서는 drop-right 과정이 내장되어 있으며 butlast과 같은 방식으로 작동합니다. 예를 들어 다음과 같이

(drop-right '(1 2 3) 1) 
=> '(1 2) 
(drop-right '(1 2 3) 2) 
=> '(1) 

은 또한 수동으로 butlast 프로 시저를 만들 수 있습니다 : 예를 들어

(define (butlast lst n) 
    (let ([len (length lst)]) 
    (if (< len n) 
     "handle error" 
     (take lst (- len n))))) 

: 당신은 드라큘라 언어로 전환하지 않은 사진에서

(butlast '(1 2 3) 1) 
=> '(1 2) 
(butlast '(1 2 3) 2) 
=> '(1) 
관련 문제