【问题标题】:Inserting mutable pairs into a mutable list将可变对插入可变列表
【发布时间】:2011-01-17 09:33:38
【问题描述】:

如何将可变对推送到堆栈上,这样我只创建一个堆栈。我有一些代码可以工作,但会在列表中的列表中创建列表......这是我认为应该工作但会引发错误的代码。

(define func (arg1 arg2 arg3) // Where arg3 is an empty list
    (mappend (mcons arg1 arg2) arg3))

上面的代码抱怨说:“mcar:需要类型的参数;给定... 谁能告诉我如何得到这样的结果,: (list (arg1 arg2) (参数#参数#) ...)

【问题讨论】:

  • 您能否提供一些输入示例和所需的相应输出?
  • 当然,例如:我想将对存储并附加到一个列表中。 (mappend (mcons 3 4) (mcons 4 5) empty) 应该导致 (list (list 3 4) (list 4 5)) 或者这就是我想要的。
  • 您的输入/输出不清楚。调用您的函数“f”或其他任何内容,并在几种情况下显示调用和所需的输出。将其编辑到您上面的问题中。比如(f 3 4 '()) ==> ((3 . 4))

标签: lisp scheme racket


【解决方案1】:
(mcons (mcons arg1 arg2) arg3)

或者(你的问题不是很清楚)

(cons (list 'a 'b) '())

此外,您问题中的语法没有任何意义。应该是这样的

(define func (lambda (arg1 arg2 arg3)
                ...body...))

【讨论】:

  • 我已经尝试过了,它有效,但问题是结果的形状不是我想要的。例如,使用您提供的给定代码,结果可能如下所示:(mcons (mcons 42 147) (mcons (mcons 48 69)。这些是列表中的列表,我想将每个 mcons 附加到更大的(单个) mcons。
【解决方案2】:

我认为你想要的功能是:

  (define (f a b c)
    (mlist (mlist a b) c))

这会产生以下结果:

  > (f 3 4 (mlist 4 5))
  {{3 4} {4 5}}

【讨论】:

    猜你喜欢
    • 2019-07-12
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    相关资源
    最近更新 更多