小编Guy*_*der的帖子

F#类型的递归树结构

我仍然是F#的新手,并试图找出如何制作我自己的类型,可以容纳任何数量的"A"之前,如果最终应该如何一个值.

作为一个例子,它可能像:

A(A(A(A(A(0))))).
Run Code Online (Sandbox Code Playgroud)

如果我尝试制作这样的类型,我试着像这样声明:

type test = 
          | A of int
          | A of test;;
Run Code Online (Sandbox Code Playgroud)

它告诉我,我不能声明两次相同的类型,因为我有重复.有没有办法解决这个问题,或者我真的需要让最后一个节点成为另一个名字:

type test = 
          | B of int
          | A of test;;
Run Code Online (Sandbox Code Playgroud)

结果将是:

A(A(A(A(B(0)))))
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

tree recursion f#

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

为什么我在基于属性的测试中收到"无参数提供"错误?

以下测试失败:

open FsCheck
open FsCheck.NUnit
open NUnit.Framework

let ``Property: double negation equals no negation`` list =
    list = List.rev (List.rev list)

[<Test>]
let ``reversing list two times is equal to not reversing list at all`` list = 
    Check.Quick ``Property: double negation equals no negation``
Run Code Online (Sandbox Code Playgroud)

错误:

消息:未提供任何参数

我认为FsCheck会在每次测试迭代时为我提供论据.

我正在引用以下文档.

f# nunit-2.5 fscheck

2
推荐指数
1
解决办法
386
查看次数

Prolog子句单独终止,但不一起终止

所以

?- canCall(mary, Person).
Run Code Online (Sandbox Code Playgroud)

工作并终止,

?- canFind(mary, Person).
Run Code Online (Sandbox Code Playgroud)

也可以工作并终止。但是不知何故

?- canCall(mary, Person), canFind(mary, Person). 
Run Code Online (Sandbox Code Playgroud)

不终止。可能是什么原因?

prolog terminate non-termination failure-slice

2
推荐指数
1
解决办法
99
查看次数

为什么我会使用关键字"inline"作为活动模式?

我仍然无法理解为什么我会将关键字inline用于函数.

它给了我什么,我还没有?

let inline (|Positive|Neutral|Negative|) x =
 match sign x with
 | 1 -> Positive
 | -1 -> Negative
 | _ -> Neutral
Run Code Online (Sandbox Code Playgroud)

f# inline active-pattern

2
推荐指数
1
解决办法
162
查看次数

F#:找不到与此覆盖相对应的抽象属性

你好伙伴Overflowers.我正在开发一个组项目,用于创建绘制3D场景的2D渲染的光线跟踪器.我目前正在进行的任务涉及对象(形状)的矩阵变换,需要移动,镜像,剪切等.

在处理形状时,我们选择实现一个定义命中函数类型的接口.此命中函数在每个形状中定义,例如球体,方框,平面等.当变换形状时,我需要变换撞击形状的光线,并且这样做的方式似乎是具有更高阶函数,改变原始形状命中功能.

为了做到这一点,我已经实现了函数transformHitFunction,它似乎工作,但实现Shape接口的新类型transformedShape给了我错误

未找到与此覆盖对应的抽象属性

这对我没有任何意义,因为它适用于同类型的其他命中功能.谁能发现什么是错的?

我试图剥离与此问题无关的所有模块,命名空间和代码.

type Transformation = Matrix of float [,]

type Vector =
    | V of float * float * float

let mkVector x y z = V(x, y, z)
let vgetX (V(x,_,_)) = x
let vgetY (V(_,y,_)) = y
let vgetZ (V(_,_,z)) = z

type Point =
    | P of float * float * float

let mkPoint x y z = P(x, y, z)
let pgetX (P(x,_,_)) = x
let pgetY (P(_,y,_)) = y
let pgetZ …
Run Code Online (Sandbox Code Playgroud)

f# interface higher-order-functions

2
推荐指数
1
解决办法
352
查看次数

由于F#库中的DLL加载问题,NUnit测试失败

在将NUnit与F#一起使用之前,我遇到过这个问题:

无法加载文件或程序集'nunit.framework,Version = 2.6.3.13283

我已将我的FSharp.Core版本降级为较低的版本号.我不确定我需要做什么来让我的测试运行没有任何例外.

module Foo

open NUnit.Framework
open FsUnit

[<Test>]
let ``some test``() =
    1 |> should equal 1
Run Code Online (Sandbox Code Playgroud)

Packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="FSharp.Core" version="4.0.0.1" targetFramework="net46" />
  <package id="FsUnit" version="1.4.1.0" targetFramework="net46" />
  <package id="NUnit" version="2.6.4" targetFramework="net46" />
  <package id="NUnitTestAdapter" version="2.0.0" targetFramework="net46" />
  <package id="xunit" version="2.1.0" targetFramework="net46" />
  <package id="xunit.abstractions" version="2.0.0" targetFramework="net46" />
  <package id="xunit.assert" version="2.1.0" targetFramework="net46" />
  <package id="xunit.core" version="2.1.0" targetFramework="net46" />
  <package id="xunit.extensibility.core" version="2.1.0" targetFramework="net46" />
  <package id="xunit.extensibility.execution" version="2.1.0" targetFramework="net46" />
  <package id="xunit.runner.visualstudio" version="2.1.0" …
Run Code Online (Sandbox Code Playgroud)

f# nunit assembly-binding-redirect

2
推荐指数
1
解决办法
572
查看次数

使用F#的代数数据类型来解决代数问题

f#中的代数数据类型如何工作?我想看一个基本的示例程序来解释它但似乎找不到任何东西.

例如,可能是执行二次公式的代码或找到形状区域的解决方案.

f# algebra algebraic-data-types

2
推荐指数
1
解决办法
397
查看次数

启动 Neo4j 失败:地址 localhost:7474 已在使用中,无法在 Mac OSX 上绑定到它

我正在尝试在本地主机(mac osx - El-capitan)上安装 neo4j 服务器,但出现此错误 -

启动 Neo4j 失败:地址 localhost:7474 已在使用中,无法绑定到它。

我尝试停止端口运行,然后安装它并抛出 neo4j 安装应用程序,但它仍然给出此错误

当我尝试启动 neo4j 服务器时,出现以下错误:

./usr/local/bin/neo4j:第 229 行:[:参数太多

macos neo4j

2
推荐指数
1
解决办法
3874
查看次数

在 F# 中将字符串转换为键值对

给定一个字符串,例如

一:1.0|二:2.0|三:3.0

我们如何创建一个字符串形式的字典:float?

open System
open System.Collections.Generic

let ofSeq (src:seq<'a * 'b>) = 
    // from fssnip
    let d = new Dictionary<'a, 'b>()
    for (k,v) in src do
        d.Add(k,v)
    d


let msg = "one:1.0|two:2.0|three:3.0"
let msgseq = msg.Split[|'|'|] |> Array.toSeq |> Seq.map (fun i -> i.Split(':'))
let d = ofSeq msgseq // The type ''a * 'b' does not match the type 'string []'
Run Code Online (Sandbox Code Playgroud)

此操作将在一个紧密循环内进行,因此效率将是一个加分项。虽然我也想看到一个简单的解决方案,只是为了让我的 F# 轴承。

谢谢。

f#

2
推荐指数
1
解决办法
1148
查看次数

如何将跟踪输出重定向到文件

我正在跟踪序言程序

1 ?- trace.
true.

[trace] 1 ?- solve.
   Call: (7) solve ? 
Run Code Online (Sandbox Code Playgroud)

我也试过

tell('trace_op.txt').
Run Code Online (Sandbox Code Playgroud)

该文件已创建但为空

现在的痕迹真的很多。我想将输出重定向到一个文件 我们可以将它重定向到一个文件吗?

prolog swi-prolog

2
推荐指数
1
解决办法
1460
查看次数