Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
List 替换列表中第一个出现的元素_List_Functional Programming_Scheme_Lisp_Sisc - Fatal编程技术网

List 替换列表中第一个出现的元素

List 替换列表中第一个出现的元素,list,functional-programming,scheme,lisp,sisc,List,Functional Programming,Scheme,Lisp,Sisc,我正在编写一个函数replaceFirst(xyl),它只将列表L中第一个出现的X替换为Y 以下是我迄今为止所做的工作: (define replaceFirst( lambda (X Y L) (cond ( (null? L) '() ) ( (equal? (car L) X) (set! Y (cdr L)) ) ( #t (replaceFirst X Y (cd

我正在编写一个函数
replaceFirst(xyl)
,它只将列表L中第一个出现的X替换为Y

以下是我迄今为止所做的工作:

(define replaceFirst( lambda (X Y L)
    (cond
        ( (null? L)             '() )
        ( (equal? (car L) X)    (set! Y (cdr L)) )
        ( #t                    (replaceFirst X Y (cdr L)) )
    )
))
这在过程设置器中给出了一个错误
:位置1的错误类型参数:#

编辑

我想出了一个解决办法:

首先,如果
X
是第一个元素,而不是使用
set(我不熟悉),我将
cons
Y
添加到列表中,不包括
X

否则,I
cons
列表的第一个元素,其函数在列表的其余部分递归调用

(define replaceFirst( lambda (X Y L)
    (cond
        ( (null? L)             '() )
        ( (equal? (car L) X)    (cons Y (cdr L)) )
        ( #t                    (cons (car L) (replaceFirst X Y (cdr L))) )
    )
))
在你的条款中:

( (equal? (car L) X)    (set! Y (cdr L)) )
函数实际返回什么?如果Y被认为是X的替代,一旦你知道(car L)等于X,那么将变量Y的值设置为列表的其余部分会对你有什么帮助呢


您的更新很好,但请注意,它返回一个新列表,如L,但其中第一次出现的X已被Y替换。它不是同一个列表。这可能很好,但是使用set在您的第一次尝试中,建议您可能想要修改作为输入传入的列表。

新列表并不重要。回顾我的第一个解决方案,我发现它是多么糟糕!我现在正试图编写一个函数,用Y替换L中最后出现的X,这要困难得多。任何关于从何处开始的提示都将不胜感激。@KOB一个简单的解决方案就是
(定义(替换最后一个XYLST)(反向(替换第一个XY(反向lst)))