尝试使用给定语法创建生产值的scheme函数有问题

尝试使用给定语法创建生产值的scheme函数有问题,scheme,racket,Scheme,Racket,因此,我试图创建一个函数,其中给定以下输入'((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 (lamb

因此,我试图创建一个函数,其中给定以下输入
'((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))
,我会尝试使用另一组映射函数从两个变量之间的,但我觉得我的思路是对的,只是不明白如何才能得到我想要的结果

我不完全确定您要在那里完成什么-但这产生了所需的输出:

(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)))

这个项目的总体目标是构建一个LL(1)解析器,这是我的一个函数,它使用相同的非终端函数并将它们合并到一行。例如,[a:=(xz)|(c)]b:=(wy)|(d)]在方案“((a(xz)(c))(b(wy)(d))中转换为该符号,我必须获取每个左手符号并将其应用于适当的规则。希望这有意义。@onbu好的,谢谢上下文:)无论如何,这不会改变我的答案,它为您的示例输入提供了正确的输出。除非你有一个反例,我想我们现在可以把它标记为正确;)是的,谢谢,我花了一些时间把你的逻辑应用到我想要的东西上。