2011-11-30 1 views
1

나는 lisp을 사용하여 사용자 입력 값 2 개를 읽고 싶다. 내 프로그램에서 사용할 수 있도록 변수에 저장하고 싶습니다.Lisp - 입력 값 2 개를 읽고 저장하는 중

(defun le-posicao() 
    (let ((n_anel) 
     (pos_anel)) 
    (princ "?") 
    (setf n_anel (read)) 
    (setf pos_anel (read)) 
    (when (and (integerp (n_anel)) (integerp (pos_anel))) 
      n_anel pos_anel))) 

내가하자 기능을 로컬 변수를 만드는거야 그리고 나는 그들에 입력에서 읽은 값을 저장할 :

지금까지 내가 현재 코드가 있습니다.

제 문제는 입력에서 두 값을 읽고 첫 번째 변수에 첫 번째 변수를 저장하고 두 번째 변수를 다른 변수에 저장하는 방법입니다. 값은 다음 형식으로되어 있습니다.

? value1 value2 

누군가 나를 도울 수 있습니까?

답변

1

당신은 절대적으로 Lisp을 사용하려고합니다. 이것이 가능한 동안, 그것은 약간 고통 스러울지도 모른다.

코드를 좀 더 기능적으로 만들려면 변수를 만든 다음이를 변형시키는 대신 이름을 만들고 값을 바인딩해야합니다.

명확히하기 위해 let은 기능이 아닌 특수한 형식입니다. 어휘 적으로 범위가 지정된 이름의 바인딩을 값에 작성하는 데 사용됩니다.

(let ((n_anel (read)) 
     (pos_anel (read))) 
    (... code using but not modifying n_anel and pos_anel ...)) 

이 코드는 setf을 피할 수 :

나는 당신이 정말로 원하는 것은 생각합니다.


주 :

공통 리스프의 let에서 괄호 확실하지

- 나는 최근 Clojure의를 사용하고있어!

또한 read을 올바르게 사용하고 있는지 확실하지 않습니다.

+0

이 방법을 사용하면 입력 값의 마지막 값만 읽을 수 있습니다. 첫 번째 값을 n_anel 변수에 저장하고 두 번째 값을 pos_anel에 저장하려고합니다. –

+0

문제는 두 값으로 목록을 반환하지 않아서 마지막 값만 볼 수 있다는 것이 었습니다. 이제 해결되었습니다. 고마워요. –

+0

'let' 대신'let *'을 써야합니다. 'let '은 바인딩을 병렬로 수행하고'let * '은 순차적으로 바인딩을 수행합니다. – Daimrod

관련 문제