프로 시저를 작성하려고합니다. 쌍이 a로 시작하면 b를 반환합니다. 쌍이 b로 시작하면 c를 리턴합니다. 쌍이 c로 시작하면 a를 리턴합니다.한 쌍의 요소를 대체하는 스키마 프로 시저
(define e '((a b) (b c) (c a)))
(define (make-encoder e)
(cond ((eq? 'a (car (assq 'a e)))
(cadr (assq 'a e)))
((eq? 'b (car (assq 'b e)))
(cadr (assq 'b e)))
((eq? 'c (car (assq 'c e)))
(cadr (assq 'c e)))))
반환되는 것은 'b'뿐이므로 나머지 코드를 자르려면 내 괄호가 어디에서 잘못 되었습니까? 나는 오랫동안 놀아 왔고 그것이 내 문제인지 궁금해하고있다.
당신이 수행하기를 원하는 것은 분명하지 않습니다. 원하는 행동에 대한 몇 가지 예를 들려 줄 수 있습니까? –
@BrendanCannell 죄송합니다. 제 최종 목표는 예를 들어 'a (a b a c a b))와 같은 목록을 호출하고 그 값을 반환하는 것입니다 (b c b a b c). 그래서 모든 a가 b로 대체되고, 모든 b는 c에 대해 그리고 모든 c는 a로 대체됩니다. –
때때로 코드를 크게 읽는 데 도움이됩니다. "e에서 목록에있는 엔코더를 만들려면 : e에서 a를위한 키가 a라면, e에서 a의 값을 반환하고, 그렇지 않으면 b의 키가 'e'는'b', ... '는 소리가 나지 않습니다. ("고무 오리 디버깅"을 찾으십시오.) – molbdnilo