小编And*_*dry的帖子

模拟Pr#中的Prolog回溯

我目前正在参与一个项目开发两个节点之间可以考虑一组节点和连接,并找到最短路径的应用程序(一个常见的和众所周知的问题)(上允许的连接).好吧,我不需要从零构建应用程序,但只需要在f#中"转换"Prolog预先存在的应用程序.我以为我对此有所了解,最后问自己一个问题:"我可以创建一个能够接受像Prolog这样的事实并使用它们来进行查询的程序,而不是开发一个特殊用途的解决方案并实现专门针对这个问题的新算法.类似?".

通过这样做,我将创建一组事实(如在Prolog中),然后使用它们来进行查询.所以,考虑到现在这个新问题(在F#中转换Prolog),我需要找到一种方法来创建这样的事实:

myfact1(el1, el2,..., eln).
myfact2(el1, el2,..., elm).
...
myfactk(el1, el2,..., elp).
Run Code Online (Sandbox Code Playgroud)

用类似语法的东西:

fact factname1: el1 el2 ... eln;
fact factname2: el1 el2 ... elm;
...
fact factnamek: el1 el2 ... elp;
Run Code Online (Sandbox Code Playgroud)

我知道F#非常适合解析,所以我认为解析这个可能不是问题.

好!现在它被解析了,我应该定义一个算法,在解析代码时,将所有事实存储在某种知识中(仅仅是一个表).为了使所有需要的关联.

例如,解决方案可能是考虑所有关联的哈希表

factname1 -> el1
factname1 -> el2
...
factname1 -> eln
factname2 -> el1
factnale2 -> el2
...
factname2 -> elm
factname3 -> el1
...
...
factnamek -> el1
factnamek -> el2
...
factnamek -> elp
Run Code Online (Sandbox Code Playgroud)

通过这样做,我将始终能够解决查询.例如,考虑以下Prolog事实

mother(A, B) % This means that A is mother …
Run Code Online (Sandbox Code Playgroud)

f# parsing language-design prolog pattern-matching

6
推荐指数
1
解决办法
1570
查看次数

什么是统一算法?

嗯,我知道这可能听起来有点奇怪,但是我的问题是:"什么是统一算法".好吧,我正在尝试在F#中开发一个像Prolog一样的应用程序.它应该采取一系列事实并在进行查询时处理它们.

我被建议开始实现一个良好的统一算法,但没有关于这一点的线索.

如果你想深入了解我想做什么,请参考这个问题.

非常感谢你和圣诞快乐.

algorithm f# functional-programming prolog unification

6
推荐指数
1
解决办法
2343
查看次数

试图理解F#类定义语法

在了解了这门语言最重要的功能后,我现在正在接近F#课程.那么,类定义语法并不容易理解,但是现在我清楚了一些主要概念,但其他概念却没有.

1)我想知道的第一件事就是正确/不正确.我知道可以用两种方式定义类:

  • 隐含的类.这些类只有一个构造函数,在类的第一行中,有必要使用let绑定定义所有内部变量,为它们赋值.
  • 显式类.这些类有许多构造函数.它们通过val绑定接受未初始化的值.这些值必须在构造函数中初始化.如果构造函数无法为使用val绑定定义的至少一个私有变量定义值,编译器就会生气.

这是对的吗???

2)我在理解显式类中构造函数的语法时遇到问题.考虑以下:

这是第一个版本:

(* COMPILES :) *)
type MyType =
   val myval: int
   val myother: int
   (* Constructor *)
   new (a: int, b: int) = {
      myval = a;
      myother = b;
   }
Run Code Online (Sandbox Code Playgroud)

这是第二个版本:

(* COMPILES :) *)
type MyType =
   val myval: int
   val myother: int
   (* Constructor *)
   new (a: int, b: int) = {
      myval = a (* No semicolon *)
      myother = b (* No semicolon *)
   }
Run Code Online (Sandbox Code Playgroud)

这是最后一个版本:

(* DOES NOT …
Run Code Online (Sandbox Code Playgroud)

.net syntax f# constructor

6
推荐指数
1
解决办法
674
查看次数

F#:函数中有更多返回点,如何处理它们?

在复杂函数中返回值时出现问题.示例总是更好:

考虑以下功能:

let myf (mypar: int) =
   mypar + 1
Run Code Online (Sandbox Code Playgroud)

这里没有问题,这个函数编译正确,签名是:

val myf: int -> int
Run Code Online (Sandbox Code Playgroud)

好吧好吧.现在考虑这段代码:

let myf (mypar: int) =
   if mypar = 2 then
      4 (* ERROR *)
   mypar + 1
Run Code Online (Sandbox Code Playgroud)

这不起作用:

这个表达式应该有类型单位,但这里有int

每当我尝试从我的函数返回时,当我在a if,whilea for或其他每个块中时,都会引发此错误.我认为问题是确保所有可能的返回路径返回相同的类型,但在这里我不明白会发生什么.

请注意,如果我插入一个()单元,一切都可以工作,例如:

let myf (mypar: int) =
   if mypar = 2 then
      () (* No error *)
   mypar + 1
Run Code Online (Sandbox Code Playgroud)

但那个单位不会让我的功能恢复!它继续!!! 此外,你能解释一下F#如何处理这个???

谢谢

.net f# functional-programming return unit-type

6
推荐指数
2
解决办法
2959
查看次数

了解.NET程序集

当我在Visual Studio中的解决方案中构建项目时(它可以是C#VB.NET F#或者其他)我想每个项目只生成一个程序集吗?

所以,如果我有一个包含项目1 2 3和4的解决方案当我逐个构建每个项目时,我得到了4个组件吗?

但是,是否有可能让构建器/编译器只为整个解决方案生成一个程序集?或者两个项目一起编译?

我的意思是使用命令行调用编译器并设置目标程序集......

.net assemblies visual-studio-2010 visual-studio

6
推荐指数
1
解决办法
141
查看次数

查找所有类声明而不是从Roslyn继承另一个类声明

我有一个CSharpCompilation包含SyntaxTrees 数组的实例,我试图找到从类继承的所有类声明

例如

// Not in syntax tree but referenced in project
public class Base{}

// In syntax tree, how to find all such classes?
public class MyClass : Base {}
Run Code Online (Sandbox Code Playgroud)

我尝试过一些东西但是对所有选项都有些困惑,似乎无法找到正确的方法来做到这一点.

我试图获取符号但这对继承的类型不起作用

SyntaxTree[] trees = context.CSharpCompilation.SyntaxTrees;
IEnumerable<ISymbol> symbols = context.CSharpCompilation.GetSymbolsWithName(x => x == typeof(Base).Name, SymbolFilter.Type);
Run Code Online (Sandbox Code Playgroud)

对Roslyn来说是一个新手,并且非常感谢任何有关如何实现这一目标的建议或指示.

c# roslyn

6
推荐指数
2
解决办法
4756
查看次数

尝试使用grunt-contrib-uglify时出错:"src文件为空"

我有以下内容Gruntfile.js:

module.exports = function(grunt) {
  var config = {
    pkg: grunt.file.readJSON('package.json'),

    /* Some other tasks... */

    uglify: {
      options: {
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
      },
      def: {
        files: {
          'out/src.js': 'out/src.min.js'
        }
      }
    }
  };

  grunt.initConfig(config);
  grunt.loadNpmTasks('grunt-contrib-uglify');

  grunt.registerTask('default', [/* <other-tasks>, */ 'uglify:def']);
};
Run Code Online (Sandbox Code Playgroud)

文件夹结构如下:

project
  |
  +-out (folder)
  +-Gruntfile.js
Run Code Online (Sandbox Code Playgroud)

重要提示:gruntproject文件夹中运行.

在运行时grunt,有前一个任务uglify:def是负责生成src.jsproject/out.

当我运行时,grunt我可以看到src.js生成project/out,但当Grunt运行时,uglisy:def …

javascript gruntjs grunt-contrib-uglify

6
推荐指数
1
解决办法
4934
查看次数

MarkdownSharp是否允许反向转换(HTML到Markdown)?

标题是自我解释.我想将我的Markdown翻译成HTML,但也应该可以反向.如何实现这个使用MarkdownSharp

如果没有双向支持,你建议我使用什么工具来代替MarkdownSharp这些功能呢?

谢谢

markdown markdownsharp

5
推荐指数
1
解决办法
309
查看次数

目标"_help"有什么作用?

我很难找到与target="_help"互联网相关的信息.所以,当我HTMLAnchorElement这样的时候:

<a href="http://www.google.com" target="_help"></a>
Run Code Online (Sandbox Code Playgroud)

我可以看到这件事实际上表现得像target="_blank",但其他什么?

MDN上找不到任何东西.另外没有提及HTML5规范和详细的W3C浏览上下文页面.

html html5 hyperlink

5
推荐指数
1
解决办法
97
查看次数

获取打字稿中的类方法

我正在使用mocha chai运行打字稿单元测试(将编译器选项设置为ts-node之后)。

在我的一个单元测试中,我想获得我创建的实用程序类的所有方法,并在它们上运行相同的测试。更具体地说,我想实现以下目标:

UtilityClass.getMethods().forEach(method=>{method(sameInputData)})
Run Code Online (Sandbox Code Playgroud)

有没有办法优雅地实现getMethods?也许,另一种解决此需求的方法?

typescript

5
推荐指数
3
解决办法
4883
查看次数