racket - Dr Racket 问题中的错误。mymeber 中的未绑定标识符
问题描述
试图做一个球拍问题来判断一个数字是否在列表中。出现错误
#lang racket
(mymember (x, l))
if l=?null
then "false"
if x==car(l)
then "true"
mymember(x,l)
mymember 2' (1,3,4,5,6)
解决方案
Racket 使用前缀表示法。这使得逗号变得不必要。首先,一些语法:
如何定义一个函数?
(
define
(
name
variable1
variable2
)
body
)
wherename
是函数名,variable
s 是参数。后面是body
表达式。
例子:
; Number -> Number
; converts from fahrenheit to celsius.
(define (f2c f)
(* 5/9 (- f 32)))
如何调用函数?
(
name
expression1
expression2
)
name
是函数的名称,expression1
并且expression2
是它的参数。
例子:
(sqr 3)
;; == 9
同样,要检查两个值是否相等:(equal? x y)
如何使用 if 表达式?
(
if
question-expression
then-answer-expression
else-answer-expression
)
如果 question-expression 的值不为 false,则if
评估then-answer-expression
,否则评估else-answer-expression
。
例子:
;; Number -> Number
;; reciprocate all non-zero x, otherwise return 0.
(define (inverse-of-x x)
(if (= x 0) 0 (/ 1 x)))
... 等等。阅读Racket Guide了解该语言的语法、语义和数据类型的基本知识。
修复所有语法仍然会导致一个错误:无限循环。那是因为递归调用不在cdr
列表上调用。所以递归调用永远在同一个列表(不是更短的列表)上进行。包装 acdr
并修复语法会导致正确的功能。
#lang racket
; [X] [List-of X] -> "true" U "false"
; is x an element of l?
(define (mymember x l)
(if (equal? l null)
"false"
(if (equal? x (car l))
"true"
(mymember x (cdr l)))))
(mymember 2 '()) ; = false
(mymember 2 '(1 3 4 5 6)) ; = false
(mymember 2 '(1 3 2 5 6)) ; = true
推荐阅读
- css - HTML/CSS/JavaScript 方法,用于按行和列调整单元格大小
- reactjs - React useState 似乎不适用于对象
- python - 如何将嵌套字典呈现为表格
- python - Tkinter - 将文本框中的信息插入到 python 脚本中的特定位置
- python - 过滤大量 pyspark 数据帧,成功执行后 .show() 方法出错
- c# - 使用 Autofac.Moq 检查其他方法时如何正确模拟方法以返回特定数据?
- python - python中的相似性(3+)
- powershell - PowerShell 意外将“CN=”前缀添加到计算机名称
- macos - 使用 CGWindowListCreateImage 捕获屏幕只是返回壁纸
- javascript - localeCompare 对象数组排序不起作用