common-lisp - LISP 中的函数用 NIL 替换列表/子列表中的每个非数字
问题描述
我正在尝试自学 LISP 编程。我很难编写一个用 NIL 替换列表或子列表中的每个非数字的 LISP 函数。
例如,如果我输入 (REPLACE '(4 0 4)) 它应该返回 (4 0 4)。如果我输入 (REPLACE '(1 2 SHOE (3 4 DOOR))) 它应该返回 (1 2 NIL (3 4 NIL))
我有点卡住了......这将如何完成?任何帮助将不胜感激!
编辑:不幸的是,我没有太多,但到目前为止,我有:
(defun REPLACE (L)
(cond ( (NUMBERP L)
我知道我需要使用 NUMBERP 检查列表中的每个元素是否是一个数字。如果有人可以帮助向我解释如何从这里开始,这样我就可以取得进步,那将非常有帮助。
解决方案
您需要分步解决问题:
用 nil 替换非数字的函数:
(defun (nil-non-number v)
...)
(nil-non-number 3) ; ==> 3
(nil-non-number 'q) ; ==> nil
(nil-non-number "test") ; ==> nil
一个迭代列表并nil-non-number
用于每个元素的函数:
(defun replace-non-nums (lst)
...)
(replace-non-nums '()) ; ==> nil
(replace-non-nums '(4 0 4)) ; ==> (4 0 4)
(replace-non-nums '(4 a 4)) ; ==> (4 nil 4)
(replace-non-nums '(1 2 shoe (3 4 door))) ; ==> (1 2 nil nil)
作为最后一步,您需要在cons
测试非数字之前添加一个测试,如果是,您还应该调用replace-non-nums
该列表并将那里的返回用作元素。然后你可以再次测试最后一个:
(replace-non-nums '(1 2 shoe (3 4 door))) ; ==> (1 2 nil (3 4 nil))
所有其他测试也应该产生与以前相同的结果。
推荐阅读
- r - 在 R 中使用 dplyr 循环变量名
- php - 好的,我的 @yield 或 @extends 由于某种原因无法正常工作
- visual-studio - 在 Visual Studio 中看不到“Windows Forms App (.NET)”模板
- node.js - 如何使用 mongoose 仅更新 mongodb 中传递的值?
- angular - 如何仅在有效时将输入字段的值传递给组件?
- ios - 问题 - 我的 React Native 应用程序显示 FirebaseError: Messaging
- python-3.x - 如何根据蒙版阈值裁剪图像?
- python - 使用python将数据从oracle数据库加载到csv文件
- django - 如何使用复选框将值传递给视图 django?
- r - 在数据框中为组合创建 na 值