remove first occurance of element from list
$begingroup$
As explained here i'm learning a limited subset of scheme.
My task has been to sort a numerical list. To implement a simple insertion sort, i need to remove a single element from a list.
I've done the following (in the spirit of The Little Schemer)
(define remove-elem
(lambda (ll elem)
(cond
((null? ll) '())
((eq? (car ll) elem) (cdr ll))
(else
(cons (car ll) (remove-elem (cdr ll) elem))))
))
What are the other ways of implementing this function?
scheme
$endgroup$
add a comment |
$begingroup$
As explained here i'm learning a limited subset of scheme.
My task has been to sort a numerical list. To implement a simple insertion sort, i need to remove a single element from a list.
I've done the following (in the spirit of The Little Schemer)
(define remove-elem
(lambda (ll elem)
(cond
((null? ll) '())
((eq? (car ll) elem) (cdr ll))
(else
(cons (car ll) (remove-elem (cdr ll) elem))))
))
What are the other ways of implementing this function?
scheme
$endgroup$
add a comment |
$begingroup$
As explained here i'm learning a limited subset of scheme.
My task has been to sort a numerical list. To implement a simple insertion sort, i need to remove a single element from a list.
I've done the following (in the spirit of The Little Schemer)
(define remove-elem
(lambda (ll elem)
(cond
((null? ll) '())
((eq? (car ll) elem) (cdr ll))
(else
(cons (car ll) (remove-elem (cdr ll) elem))))
))
What are the other ways of implementing this function?
scheme
$endgroup$
As explained here i'm learning a limited subset of scheme.
My task has been to sort a numerical list. To implement a simple insertion sort, i need to remove a single element from a list.
I've done the following (in the spirit of The Little Schemer)
(define remove-elem
(lambda (ll elem)
(cond
((null? ll) '())
((eq? (car ll) elem) (cdr ll))
(else
(cons (car ll) (remove-elem (cdr ll) elem))))
))
What are the other ways of implementing this function?
scheme
scheme
edited Apr 13 '17 at 12:40
Community♦
1
1
asked Oct 29 '13 at 22:17
ricardoricardo
185210
185210
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
$begingroup$
That looks mostly right to me. I'll suggest two things.
First, there is nice syntatic sugar for defining functions:
(define (remove-elem xs elem)
(cond ...)
)
Save yourself the lambda.
Second, you are using eq?
. That is the wrong checker for this problem. That function returns true if the two objects are the exact same object in memory. It could be true for primitives like ints, but it's not necessarily true. What you want to use is eqv?
which will guaranteed work for numbers.
$endgroup$
add a comment |
$begingroup$
How would you change this code using foldr, map, and filter?
New contributor
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f33481%2fremove-first-occurance-of-element-from-list%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
That looks mostly right to me. I'll suggest two things.
First, there is nice syntatic sugar for defining functions:
(define (remove-elem xs elem)
(cond ...)
)
Save yourself the lambda.
Second, you are using eq?
. That is the wrong checker for this problem. That function returns true if the two objects are the exact same object in memory. It could be true for primitives like ints, but it's not necessarily true. What you want to use is eqv?
which will guaranteed work for numbers.
$endgroup$
add a comment |
$begingroup$
That looks mostly right to me. I'll suggest two things.
First, there is nice syntatic sugar for defining functions:
(define (remove-elem xs elem)
(cond ...)
)
Save yourself the lambda.
Second, you are using eq?
. That is the wrong checker for this problem. That function returns true if the two objects are the exact same object in memory. It could be true for primitives like ints, but it's not necessarily true. What you want to use is eqv?
which will guaranteed work for numbers.
$endgroup$
add a comment |
$begingroup$
That looks mostly right to me. I'll suggest two things.
First, there is nice syntatic sugar for defining functions:
(define (remove-elem xs elem)
(cond ...)
)
Save yourself the lambda.
Second, you are using eq?
. That is the wrong checker for this problem. That function returns true if the two objects are the exact same object in memory. It could be true for primitives like ints, but it's not necessarily true. What you want to use is eqv?
which will guaranteed work for numbers.
$endgroup$
That looks mostly right to me. I'll suggest two things.
First, there is nice syntatic sugar for defining functions:
(define (remove-elem xs elem)
(cond ...)
)
Save yourself the lambda.
Second, you are using eq?
. That is the wrong checker for this problem. That function returns true if the two objects are the exact same object in memory. It could be true for primitives like ints, but it's not necessarily true. What you want to use is eqv?
which will guaranteed work for numbers.
answered Oct 29 '13 at 23:06
BarryBarry
17.2k13087
17.2k13087
add a comment |
add a comment |
$begingroup$
How would you change this code using foldr, map, and filter?
New contributor
$endgroup$
add a comment |
$begingroup$
How would you change this code using foldr, map, and filter?
New contributor
$endgroup$
add a comment |
$begingroup$
How would you change this code using foldr, map, and filter?
New contributor
$endgroup$
How would you change this code using foldr, map, and filter?
New contributor
New contributor
answered 1 min ago
Farzad SaeidiFarzad Saeidi
1
1
New contributor
New contributor
add a comment |
add a comment |
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f33481%2fremove-first-occurance-of-element-from-list%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown