Проблема с моей функцией схемы, которая пытается создать производственные значения с заданной грамматикой - PullRequest
0 голосов
/ 21 ноября 2018

Итак, я пытаюсь создать функцию, в которой задан следующий ввод '((a (xz) (c)) (b (wy) (d))) Я должен сделать что-то вроде этого '((a (xz)) (a (c)) (b (wy)) (b (d)))

Я пытался написать это

(define productionValues
  (lambda (input)
    (let ((lhs (map (lambda (x) (car x)) input)))
      (let ((rhs (map (lambda (y) (cdr y)) input)))
        (map (lambda (l) (cons l (map (lambda (r) (car r)) rhs))) lhs)
        )
      )
  ))

Это не работает и заставляет меня ((a (xz) (c)) (b (xz) (c))) Моя логика заключается в том, что у меня есть переменная lhs , которая хранит (a b) и rhs , которая хранит (((xz) (c)) ((wy) (d))), и я попытался бы использоватьдругой набор картографических функций для извлечения между двумя переменными, но я чувствую, что нахожусь на некотором правильном пути, но просто не понимаю, как я мог получить желаемый результат.

1 Ответ

0 голосов
/ 21 ноября 2018

Я не совсем уверен, чего вы там добиваетесь - но это дало желаемый результат:

(define (productionValues input)
  ; flatten the sublists
  (apply append
         ; create the lists as per the sample
         (map (lambda (x) (list (list (first x) (second x))
                                (list (first x) (third  x))))
              input)))

Например:

(define input '((a (xz) (c)) (b (wy) (d))))
(productionValues input)
=> '((a (xz)) (a (c)) (b (wy)) (b (d)))
...