是否可以应用模式列表和 exp 进行匹配?
Is it possible to have a list of patterns and exp applied to match?
我想使用 Racket 中的函数 match
来获取 exp0 给出 true 的第一个元素。
(define mylist '(['c c] ['a a] ['* *]))
(match '* mylist))
但这不起作用。它会抛出一个错误 "expected a clause with a pattern and a result"。我怎样才能实现它?
(首先,你有一个小问题;我真的不认为你想在引用列表中引用你的键;这将生成实际上是包含符号 "quote" 的列表的键。基本上,只是不要在引号中加上引号。)
下一步:您可能正在寻找几种不同的东西之一。
第一个也是最明显的答案就是使用 dict-ref
:
#lang racket
(define mylist '([c c] [a a] [* *]))
(dict-ref mylist '*)
... 生成列表 '(*)
。您可以阅读 dict-ref 上的文档以了解为什么它是一个列表。
在您真正想要使用 match
为您提供的更丰富的匹配语义之前,这会一直有效。如果你只想使用相等匹配,就用上面的解决方案。
因此,假设您要查找由字母 'a 后跟数字组成的密钥:
#lang racket
(define mylist
'([(c b) c]
[(a 3) a]
[(* *) *]))
(findf (match-lambda [(list (list 'a (? number?)) _) #t]
[other #f])
mylist)
我想使用 Racket 中的函数 match
来获取 exp0 给出 true 的第一个元素。
(define mylist '(['c c] ['a a] ['* *]))
(match '* mylist))
但这不起作用。它会抛出一个错误 "expected a clause with a pattern and a result"。我怎样才能实现它?
(首先,你有一个小问题;我真的不认为你想在引用列表中引用你的键;这将生成实际上是包含符号 "quote" 的列表的键。基本上,只是不要在引号中加上引号。)
下一步:您可能正在寻找几种不同的东西之一。
第一个也是最明显的答案就是使用 dict-ref
:
#lang racket
(define mylist '([c c] [a a] [* *]))
(dict-ref mylist '*)
... 生成列表 '(*)
。您可以阅读 dict-ref 上的文档以了解为什么它是一个列表。
在您真正想要使用 match
为您提供的更丰富的匹配语义之前,这会一直有效。如果你只想使用相等匹配,就用上面的解决方案。
因此,假设您要查找由字母 'a 后跟数字组成的密钥:
#lang racket
(define mylist
'([(c b) c]
[(a 3) a]
[(* *) *]))
(findf (match-lambda [(list (list 'a (? number?)) _) #t]
[other #f])
mylist)