- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是计划编程的初学者。我知道Scheme中的点符号用于表示一对符号,例如'(a . b)
。
第一个元素可以是一个符号,也可以是一个列表,这并不重要。但特别是第二个元素必须是一个符号,如果不是,例如可能是一个列表,那么我们就无法使用内置的 cons
过程创建一对。
那么是否可以创建一对 2 个列表???好吧,我正在考虑一个解决方案是将列表转换为符号,但实际上这是两个完全不同的事情 ->据我所知是不可能的。
这是我写的代码:
(define compare-attrs
(lambda (attribute1 attribute2)
(if (or (and (null? attribute1) (null? attribute2)) (and (not (null? attribute1)) (not (null? attribute2))))
(cons attribute1 attribute2)
#f)))
其中attribute1和attribute2是2个列表,我的输出是:
attribute1 atrribute2
预期输出:'(attribute1 . attribute2)
请解释一下。提前致谢!!!
编辑:添加比较属性函数的使用
函数compare-attrs用于提取描述实体属性的部分,并cons
它们以形成一对,实体定义如下:
(entity e0 (prov:label "entity e0")
(entity e1 (prov:location "London")
这些实体的属性是(prov:label "entity e0")
和(prov:location "London")
。当应用函数compare-attrs时,因为这些属性不为null
,所以我期望的输出是
`(prov:label "entity e0") . (prov:location "London")`
最佳答案
注意:这是从 Recursive range in Lisp adds a period? 的答案中截取的,这实际上是在问一个不同的问题。然而,如何打印对的解释是相同的。其余答案不同。
您的问题存在一些误解,但我认为我们可以澄清。
The first [argument to
cons
] could be a symbol, or a list, it doesn't matter. But specially the second element must be a symbol, if it is not, may be a list for instance, then we can't create a pair with built-in cons procedure.
这是不正确的。您可以调用cons
无论你喜欢什么论点,你总是会得到 cons
其 car
的单元格与 cons
的第一个参数相同,以及谁的cdr
与 cons
的第二个参数相同。也就是说,关于 cons
唯一重要的事情是它满足方程
(eq? a (car (cons a b))
(eq? b (cdr (cons a b))
So is it possible to create a pair of 2 lists??? Well i'm thinking of a solution is that converting a list to symbol but actually those are 2 completely different thing -> impossible as i understand.
这很有可能;如果您有两个列表,例如 list1
和list2
,您可以创建一对 car
是 list1
以及谁的cdr
是 list2
只需调用 (cons list1 list2)
。现在,我认为您遇到的问题是您期望看到 (<value-of-list1> . <value-of-list2>)
作为输出,你会看到一些不同的东西。为了解释为什么会这样,我们需要了解列表在 Lisp 中是如何表示的,以及如何打印对的。
Scheme 中的列表可以是空列表 ()
(在某些 Lisp 中也称为 nil
),或者一个 cons 单元,其 car
(也称为 first
)是列表的一个元素,其 cdr
(也称为 rest
)是列表的其余部分(即另一个列表),或者是终止列表的原子。常规终止符是空列表 ()
;列表终止于 ()
被称为“正确的列表”。由任何其他原子终止的列表称为“不正确列表”。列表(1 2 3 4 5)
包含元素 1、2、3、4 和 5,并以 ()
终止。你可以通过
(cons 1 (cons 2 (cons 3 (cons 4 (cons 5 ())))))
现在,当系统打印一个cons单元时,一般情况是通过
打印它(car . cdr)
例如(cons 1 2)
的结果打印为
(1 . 2)
由于列表是由 cons 单元格构建的,因此您也可以对列表使用此表示法:
'(1 2 3 4 5) ==
'(1 . (2 . (3 . (4 . (5 . ())))))
不过,这相当笨重,所以大多数 lisp(据我所知)都有打印 cons 单元格的特殊情况:如果 cdr
是一个列表(另一个 cons 单元格或 ()
),那么不要打印 .
,并且不打印 cdr
周围的括号(否则它会有,因为它是一个列表)。
现在我们可以解释为什么结果是 (cons list1 list2)
看起来不像(<value-of-list1> . <value-of-list2>)
。如果您调用cons
有两个列表,您确实会得到一对预期的 car
和cdr
,但它没有打印 .
符号。例如,
(cons '(1 2 3) '(a b c))
;=> ((1 2 3) . (a b c)) ; which is typically *printed* as
;=> ((1 2 3) a b c)
但是,只要以下方程成立,打印的表示形式并不重要:
(eq? a (car (cons a b))
(eq? b (cdr (cons a b))
果然:
(car (cons '(1 2 3) '(a b c)))
;=> (1 2 3)
(cdr (cons '(1 2 3) '(a b c)))
;=> (a b c)
在您询问的具体示例中,请考虑调用时会发生什么
(cons '(prov:label "entity e0") '(prov:location "London"))
事实上,结果是
((prov:label "entity e0") . (prov:location "London"))
但是,由于打印规则,这打印为
((prov:label "entity e0") prov:location "London")
尽管如此,您仍然可以使用 car
来获取这两个属性。和cdr
:
(car '((prov:label "entity e0") prov:location "London"))
;=> (prov:label "entity e0")
(cdr '((prov:label "entity e0") prov:location "London"))
;=> (prov:location "London")
这就是您稍后真正需要做的事情。
关于scheme - 方案中的点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20216711/
给定一个字符串,例如 s="##$$$#",我如何找到索引之前的“#”符号数等于“”数的索引$"符号在索引之后? 示例:如果 s="##$$$#",则输出将为 2。 解释:在索引 2 之前我们有 2
在本教程中,您将借助示例了解 JavaScript 符号。 JavaScript 符号 JavaScript ES6 引入了一种新的原始数据类型,称为 Symbol(符号)。符号是不可变的(不能更改)
在“函数编程的工艺”一书中,符号 '>.>' 将函数连接在一起,与 '.' 的方向相反。但是当我使用 ghci 实现它时,它显示了超出范围的错误 '>.>'。为什么?它是不再使用的旧符号吗? 最佳答案
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我需要从向量中删除 \"。这是我的数据: data <- c("\"https://click.linksynergy.com/link?id=RUxZriH*PWc&offerid=323058.1
我在 Nginx 配置中使用正则表达式来捕获文件 URL,但如果文件 URL 包含 # 符号,正则表达式模式将不会捕获它。 这里是nginx的配置部分。 location ~ ^/p/(?[\w\-=
如何使 & 符号在此图表的第一组条形/列下正确显示: http://jsfiddle.net/VxbrK/2/ 应该是“Apples & Oranges”而不是“Apples & Oranges”。
**在verilog中是什么意思? 我为测试台提供了以下逻辑 localparam NUM_INPUT_BITS = 1; localparam NUM_OUTPUT_BITS
我有一个使用正则表达式来验证电子邮件地址的方法。 public String searchFormail(String searchWord) { Pattern pattern = Patt
我想将一个字符串拆分为数字部分和文本/符号部分我当前的代码不包含负数或小数,并且表现得很奇怪,在输出的末尾添加了一个空列表元素 import re mystring = 'AD%5(6ag 0.33-
我有一些代码需要从数组中选择一个随机字符串,但它一直返回单个字母或数字。如何解决这个问题? var name = ["Yayek", "Vozarut", "Gezex",
我刚开始使用 Python,我在考虑应该使用哪种表示法。我读过 PEP 8关于 Python 符号的指南,我同意那里的大多数内容,除了函数名称(我更喜欢混合大小写风格)。 在 C++ 中,我使用匈牙利
在用 C# 编写代码时,我错误地在 if 语句中的变量前添加了一个符号(而不是感叹号)。 bool b = false; if (@b) { } 我很惊讶它编译成功,没有任何错误。 我想知道:上面的代
本文实例为大家分享了特殊字符替换电话号码中某一部分的方法,ios利用-号替换电话号码中间四位,供大家参考,具体内容如下 1、效果图 2、代码 rootviewcontroll
当我使用“x”和“z”作为符号时,这段代码没有问题: from sympy import * x, z = symbols('x z') y = -6*x**2 + 2*x*z**0.5 + 50*x
我需要从文本中删除标点符号: data <- "Type the command AT&W enter. in order to save the new protocol on modem;"
我有几个数字是 numeric 类。下面的例子。 df = c(12974,12412,124124,124124,34543,4576547,32235) 现在我想在每个数字前添加 '$' 符号而不
我有一个 highcharts 图例,其中符号以不同的大小显示,因为它们在实际图表中的大小不同。不幸的是,当数据点的大小增加时,它们也会在图例中增加。无论数据点大小如何,我都希望图例符号保持相同的大小
我需要使用包含平均值+-SD的标题。到目前为止,我只能得到以下信息: "Mean +- SD or N (%)" [1] "Mean +- SD or N (%)" 如何直接使用“+-”符号?您知道一
使用 XSLT 和 XPath 1.0,我有一个要转义的字符串以用于 URL,例如: one word & another 因此,描述元素的 text() 应该进行 URL 转义。 我该怎么做
我是一名优秀的程序员,十分优秀!