我是Visual C#Studio的新手(实际上使用的是Express版,但是另一个开发人员正在使用完整版),我们正在使用版本控制(svn).
我可以将项目文件添加到存储库,因为这个repo只适用于使用Visual C#Studio的我们两个人.但感觉就像那里有一些无关的文件.有熟悉Visual C#Studio项目文件的人能告诉我哪些文件可以安全地被svn:忽略?
一些可疑文件:
我确定.sln是必需的,但这是什么.suo?和.csproj?在加载项目时,Visual C#Studio是否可以/应该生成这些内容?
我查看了SMLNJ用户指南,找不到任何有关调试功能的信息.我很想看到一个堆栈跟踪,或者通过一个函数.这可能吗.是否有其他类似SML变体的实现可以提供此功能?
我刚刚开始使用SML,我正在尝试修改一些代码,以便我理解它正在做什么(我找不到一个像样的SML/NJ调试器,但这是一个单独的问题).
fun type_check e theta env non_gens =
case e of
constant_int _ => (integer,theta)
|
constant_bool _ => (boolean,theta)
| ...
Run Code Online (Sandbox Code Playgroud)
假设这是有效的代码,因为constant_int是已经声明的数据类型的一部分,等等.如何添加一个print语句来说"返回"整数"'到案例中?我试过了:
...
constant_int _ => (print "returning integer") (integer,theta)
...
Run Code Online (Sandbox Code Playgroud)
但我得到:
stdIn:167.22-167.65 Error: operator is not a function [tycon mismatch] operator: unit in expression: (print "returning integer") (integer,theta)
我想我只是不理解如何执行一系列语句,只有最后一个语句应该被视为返回值.有什么建议?
另外,我如何打印自己的数据类型值?当我尝试将数据类型值传递给print()时,SML不喜欢所以我可能必须为每种数据类型创建一个新的打印函数,这是正确的吗?
我正在编写一个方案解释器,如果是if语句,例如:
(if (< 1 0) 'true)
Run Code Online (Sandbox Code Playgroud)
我试过的任何解释器都会返回一个新提示.但是当我对此编码时,我有一个if是否有另一种表达方式.如果不打印任何东西,我可以返回什么?
(if (has-alternative if-expr)
(eval (alternative if-expr))
#f) ;; what do I return here?
Run Code Online (Sandbox Code Playgroud) 我正在编写一个Scheme解释器,我面临一个有效的let语句,例如:
;; should print 7
(let ((a 4) (b 3))
(let ((a (* a a))
(b (* b b)))
(+ a b)
(- a b)))
Run Code Online (Sandbox Code Playgroud)
我的解释器只实现了Scheme的一个纯函数子集,因此不存在set!等副作用.在纯函数式语言中,为什么要在let语句中允许多个表达式,如上所述?
在编写我的翻译时,除了let中的最后一个表达式,我还有什么理由可以评估它吗?似乎它们永远不会影响最后评估的陈述的结果.
我有一个元素列表'(abc),我想找到x是否(真或假)x,例如,x可以是'a或'd.这有内置功能吗?
我在Prolog中有这个代码:
dynamic(player_at/1).
player_at(house).
goto(X) :- retract(player_at(house)), assert(player_at(X)).
Run Code Online (Sandbox Code Playgroud)
但我仍然得到这个错误:
uncaught exception: error(permission_error(modify,static_procedure,player_at/1),retract/1)
Run Code Online (Sandbox Code Playgroud)
当我执行goto(foo)时.
我已经阅读了动态文档,但我无法弄清楚如何使用它,至少在gprolog中.我错过了什么吗?
我正在使用DrScheme编写一个Scheme解释器.我定义了一个Read Eval Print Loop,我正在重新定义eval过程.这在Chez Scheme等其他方案实现中效果很好,但我不喜欢Chez Scheme中的代码编辑,所以我想使用DrScheme.
当我做出如下定义:(define(eval exp env)(cond ...))它说:define-values:不能改变常量标识符:eval
有没有办法覆盖它,让我改变常量标识符?我宁愿不必重命名所有变量来解决这个问题.
我有一个函数,它采用一个有两个或三个元素的列表.
;; expecting either ((a b c) d) or ((a b c) d e)
(define (has-third-item ls)
(if (null? (caddr ls))
false
true)
)
Run Code Online (Sandbox Code Playgroud)
但是这段代码失败了
mcar: expects argument of type <mutable-pair>; given ()
Run Code Online (Sandbox Code Playgroud)
在(null?(caddr ls))表达式上.
我也试过了
(eq? '() (caddr ls))
Run Code Online (Sandbox Code Playgroud)
但它也没有用.如何判断是否有第三项?
我正在Prolog写一个文本冒险游戏,我打印出房间出口.我有以下代码:
exits_from(Room) :-
connected(Room, X),
write(X), write(' ').
Run Code Online (Sandbox Code Playgroud)
其中connected/2是:
connected(X, Y) :- path(X, Y).
connected(X, Y) :- path(Y, X).
Run Code Online (Sandbox Code Playgroud)
和路径是:
path(room, hallway).
path(hallway, foyer).
Run Code Online (Sandbox Code Playgroud)
等等.
当我打印一个房间的出口时,它得到第一个,然后想要一个';' 说我想要另一个解决方案.反正是否强制谓词完全计算结果,以便玩家不必继续要求更多退出?
它只存在于静态类型语言中吗?并且只有当语言不是强类型时才存在(即,Java 是否有强类型)?此外,它属于哪里 - 在编译阶段假设它是一种编译语言?
一般来说,类型不明确时的规则是由语言规范规定的还是由实现决定的?
我正在创建一个Rationals(int*int)结构,我的一个函数是:
fun diff ((n, d), (n', d')) = let val (top, bot) = sum ((n, d), (~n', d'))
in
(top / gcd(top, bot), bot / gcd(top, bot))
end
Run Code Online (Sandbox Code Playgroud)
gcd给了我最大的共同点,所以我最终得到2/8,而不是它应该是1/4.gcd使用mod来查找gcd,因此它返回一个int.但我不能得到分区的表达式作为int类型.当我尝试添加: int * int
到diff声明的末尾时,它给出了一个类型错误,表达式real*real和int*int不匹配.
如何强制整数除法,或将表达式转换为整数?如果两者都有可能,哪一个更好?