Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming Writing scheme函数,用于将列表中给定要搜索的字符的元素加倍_Functional Programming_Scheme_Racket - Fatal编程技术网

Functional programming Writing scheme函数,用于将列表中给定要搜索的字符的元素加倍

Functional programming Writing scheme函数,用于将列表中给定要搜索的字符的元素加倍,functional-programming,scheme,racket,Functional Programming,Scheme,Racket,我的目标是编写一个名为(double-ALIST-ELEM)的函数,它接受元素列表并返回该列表,其中元素(任何方案值)的每次出现都被两个元素的序列替换。在嵌套列表中不会发生替换 例如,如果我打电话 (double '(a b c) 'c) 它会回来的 '(a b c c) 这是我目前掌握的代码 (define (double x y) (cond ((null? x) '()) ((not(equal? (car x) y)) (double (cdr x) y))

我的目标是编写一个名为(double-ALIST-ELEM)的函数,它接受元素列表并返回该列表,其中元素(任何方案值)的每次出现都被两个元素的序列替换。在嵌套列表中不会发生替换

例如,如果我打电话

(double '(a b c) 'c)
它会回来的

'(a b c c)
这是我目前掌握的代码

(define (double x y)
  (cond ((null? x) '())
    ((not(equal? (car x) y)) (double (cdr x) y))
      (else (append (list (car x)) (append x (double (cdr x) y))))))
如果我们以上一个示例为例,用a替换c,则得到正确的输出。然而,如果我运行上面的示例,我只会得到一个包含“(c)的列表。我尝试过许多不同的写作方法,我似乎总是能得到这样的结果。我完全不确定在这种情况下我做错了什么

好的,我发现了一个错误(至少我认为是这样),如果找不到我要查找的字符,我会保留列表中以前的元素,但现在我被else语句卡住了,我需要在其中添加什么来再次将元素添加到该位置并调用函数。这些是最新的变化

(define (double x y)
  (cond ((null? x) '())
    ((not(equal? (car x) y)) (append (list (car x)) (double (cdr x) y)))
      (else <insert-code-here>)))
(定义(双x y)
(cond((null?x)“”())
((不相等)(车x)y))(附加(列表(车x))(双(cdr x)y)))
(其他))

如果元素匹配
y
,您希望
cons
y
打开两次

否则,只需使用尾部递归来重新编译列表

(define (double xs y)
  (cond ((null? xs) '())
        ((equal? y (car xs)) (cons y (cons y (double (cdr xs) y))))
        (else (cons (car xs) (double (cdr xs) y)))))

(double '(a b c a b c a b c) 'c)
;; => '(a b c c a b c c a b c c)

哇,我甚至没有想到使用我正在寻找的元素来使用cons添加到列表中。非常感谢。我非常热衷于使用append以某种方式解决这个问题。你也可以使用
(cons(car-xs)(cons(car-xs)(double(cdr-xs)y))
——但是因为
y
等于
(car-xs)
,所以它读起来稍微好一点,就像
y
^是的,我想我甚至不想用cons来解决这个问题的部分仍然是正确的。谢谢。
(append(list y)(double(cdr xs)y))
也能工作,但在这种情况下,它比简单的
cons
效率低^ ^哇,哈哈。有时,我对这项计划犹豫不决。