下面是两个桌面的Alloy表示.在fact我指定第一个桌面包含两个图标,A和B,第二个桌面包含一个图标,A.我想指定正好有两个桌面,所以我把它放在以下事实中:
#Desktop = 2
Run Code Online (Sandbox Code Playgroud)
当我完成run命令时,我收到了这条消息:No instance found.当我从而省略fact了该run命令并指定了命令中的桌面数量时:
run {} but 2 Desktop
Run Code Online (Sandbox Code Playgroud)
然后生成所需的实例.为什么?当我限制桌面数量时,为什么它不起作用fact,但是当我限制run命令中的桌面数量时它是否有效?
open util/ordering[Desktop]
sig Desktop {
icons: set Icon
}
abstract sig Icon {}
one sig A extends Icon {}
one sig B extends Icon {}
fact {
first.icons = A + B
first.next.icons = A
}
Run Code Online (Sandbox Code Playgroud) 我想创建三个Haskell函数:a,b,和c.
每个函数都有一个参数.这个论点是三个函数之一.
我想函数a有这种行为:
a则返回函数a.b.a.这里是我想要的功能回顾a:
a a = a
a b = c
a c = a
Run Code Online (Sandbox Code Playgroud)
这是我希望其他两个功能的行为:
b a = a
b b = a
b c = c
c a = c
c b = b
c c = c
Run Code Online (Sandbox Code Playgroud)
一旦创建,我希望能够以各种方式组合函数,例如:
a (c b)
= a (b)
= c
Run Code Online (Sandbox Code Playgroud)
我该如何创建这些功能?
haskell functional-programming function function-composition higher-order-functions
我正在学习如何使用名为Alex 1的Haskell词法分析器工具.
我正在尝试为此字符串实现词法分析器(电子邮件"From:"标题):
From: "John Doe" <john@doe.org>
Run Code Online (Sandbox Code Playgroud)
我想把它分解成这个令牌列表:
[
From,
DisplayName "John Doe",
Email,
LocalName "john",
Domain "doe.org"
]
Run Code Online (Sandbox Code Playgroud)
以下是我的实施.如果字符串不包含显示名称,它可以正常工作.也就是说,这很好用:
let s = "From: <john@doe.org>"
alexScanTokens s
Run Code Online (Sandbox Code Playgroud)
但是,当我包含显示名称时,我收到以下错误消息:
[From*** Exception: lexical error
Run Code Online (Sandbox Code Playgroud)
也就是说,这会导致错误:
let s = "From: \"John Doe\" <john@doe.org>"
alexScanTokens s
Run Code Online (Sandbox Code Playgroud)
我猜我的Alex程序的这部分导致错误:
\"[a-zA-Z ]+\" { \s -> DisplayName (init (tail s)) }
Run Code Online (Sandbox Code Playgroud)
在Alex左侧是一个正则表达式:
\"[a-zA-Z ]+\"
Run Code Online (Sandbox Code Playgroud)
右侧是找到与正则表达式匹配的字符串时要采取的操作:
{ \s -> DisplayName (init (tail s)) }
Run Code Online (Sandbox Code Playgroud)
关于问题可能是什么的任何想法?
{
module Main (main) where
}
%wrapper …Run Code Online (Sandbox Code Playgroud) Lisp新手在这里.
我创建了一个函数并将其放入此文件中:compress.lisp
现在我想将它加载到我正在使用的Lisp解释器中,GCL-2.6.2-ANSI
这是我在解释器中输入的内容:
(load "compress.lisp")
Run Code Online (Sandbox Code Playgroud)
解释器响应此错误:
Error in EVAL [or a callee]: Cannot open the file compress.lisp.
Fast links are on: do (use-fast-links nil) for debugging
Broken at CONDITIONS::CLCS-LOAD. Type :H for Help.
1 (Continue) Retry loading file "compress.lisp".
2 (Abort) Return to top level.
dbl:>>
Run Code Online (Sandbox Code Playgroud)
是否正在加载GCL-2.6.2-ANSI不允许的文件?或者(更有可能)我做错了什么; 如果是的话,什么?
Lisp新手在这里.
我正在阅读Paul Graham的书,ANSI Common Lisp.
第38页是一个uncompress功能.它需要一对对列表,其中对中的第一项是一个数字,表示应该有多少第二项.例如,解压缩:
((3 a) (2 b) c)
Run Code Online (Sandbox Code Playgroud)
应该产生这个:
(A A A B B C)
Run Code Online (Sandbox Code Playgroud)
我将uncompress函数输入到Lisp解释器(GCL-2.6.2-ANSI)中,然后像这样测试它:
(uncompress '((3 A) B (2 C) (5 D)))
Run Code Online (Sandbox Code Playgroud)
这产生了以下错误消息:
Error in IF [or a callee]: Too many arguments.
Fast links are on: do (use-fast-links nil) for debugging
Broken at IF. Type :H for Help.
1 (Abort) Return to top level.
Run Code Online (Sandbox Code Playgroud)
以下是uncompress功能.我认为我忠实地输入了书中所写的内容.我测试了每一件,每件都看似正常.说实话,我被困住了.我不知道是什么导致了这个错误.我很感激你的帮助.
(defun uncompress (lst)
(if (null lst)
nil
(let (elt (car lst))
(rest (uncompress (cdr …Run Code Online (Sandbox Code Playgroud) 如果列表有子列表,我需要一个返回true的谓词,否则返回false.
我写了一个实现它的函数(如下).我想知道这样的谓词是否已经存在?
(defun hasSublistp (lst)
(cond ((null lst) nil)
((listp (first lst)) t)
(t (hasSublistp (rest lst)))))
Run Code Online (Sandbox Code Playgroud) 我想用点(.)作为符号,像a或b.
我发现我可以通过引用和转义点来实现.但是,当点显示在屏幕上时,它被垂直条包围:
'\.
=> |.|
Run Code Online (Sandbox Code Playgroud)
如何在没有垂直条的情况下显示点?
更新:谢谢你jkiiski,使用的format工作很棒.这就是我这样做的原因:对于我自己的教育,我编写了一个函数,将列表表示法中的列表转换为点表示法中的等效列表.感谢您的帮助,现在效果很好:
(defun list-notation-to-dot-notation (lst)
(cond ((atom lst) lst)
((null (cdr lst)) (list (list-notation-to-dot-notation (car lst)) '\. 'NIL))
(t (list (list-notation-to-dot-notation (car lst)) '\. (list-notation-to-dot-notation (cdr lst))))))
(defun list-2-dot (lst)
(format t "~a" (list-notation-to-dot-notation lst)))
(list-2-dot '(a))
=> (A . NIL)
(list-2-dot '(a b))
=> (A . (B . NIL))
(list-2-dot '((a) b))
=> ((A . NIL) . (B . NIL))
(list-2-dot '(a (b) c))
=> (A . ((B …Run Code Online (Sandbox Code Playgroud) 我想将该union函数应用于列表中的列表.例如:
适用union于此列表中的列表:'((a b c) (a d))
是否有一个"展开"列表的函数,以显示列表中的元素序列?例如:
展开此列表'((a b c) (a d))会生成此序列'(a b c) '(a d)
如果我能做到这一点,那么我可以将该union函数应用于序列.
获取union列表中包含的列表序列的推荐习惯是什么?
我正在将一些Scheme代码转换为Common Lisp.我不知道Scheme.我知道一点Common Lisp.
我想我理解这个Scheme代码:
(define (make-cell)
(let ((local-name '()))
(define (local-add-name name)
(set! local-name name))
(define (me message)
(cond ((eq? message 'add-name) local-add-name)
((eq? message 'name) local-name)))
me))
Run Code Online (Sandbox Code Playgroud)
使用该功能,我可以制作两个单元格:
(define a (make-cell))
(define b (make-cell))
Run Code Online (Sandbox Code Playgroud)
然后我可以在每个单元格中存储一个名称:
((a 'add-name) 'a)
((b 'add-name) 'b)
Run Code Online (Sandbox Code Playgroud)
然后我可以检索存储在每个单元格中的名称:
(a 'name)
Run Code Online (Sandbox Code Playgroud)
=> a
(b 'name)
Run Code Online (Sandbox Code Playgroud)
=> b
a-cell在其中存储了名称"a".b-cell在其中存储了名称"b".我可以查询a-cell的名称,然后返回"a".我可以查询b-cell的名称,然后返回"b".
到目前为止,我是否正确理解?
现在我想使用Common Lisp实现相同的功能.这是我创建的make-cell函数:
(defun make-cell ()
(let ((local-name nil))
(defun local-add-name (name)
(setf local-name name))
(defun me (message)
(cond ((eq message 'add-name) #'local-add-name)
((eq message 'name) local-name)))))
Run Code Online (Sandbox Code Playgroud)
显然这是错误的,因为它没有给出所需的行为,正如我接下来所示. …
我在十六进制编辑器中打开了 dBase (.dbf) 文件。见下文。我圈出了包含“语言驱动程序名称”的字段。我如何解释该字段?该字段是字符串吗?如果它是一个字符串,那么为什么它包含一堆空(十六进制 0)字符?