首页 > 解决方案 > 我的方案功能有问题,它试图用给定的语法创建生产值

问题描述

所以我正在尝试创建一个函数,在给定以下输入的情况下'((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))),我会尝试使用另一组映射函数从两个变量之间获取,但我觉得我在在某种程度上是正确的轨道,但只是不明白我怎么能得到我想要的输出。

标签: schemeracket

解决方案


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

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

推荐阅读