小编Chr*_*ton的帖子

建议多个日历,日期和持续时间使用哪种数据结构?

我需要存储由多个不同日历产生的日期和持续时间.特别是我需要存储以下日期:

  1. 在不同的时间跨越不同国家的格里高利日历
  2. 涵盖至少500年的历史时期
  3. 处理多种类型的日历 - 月球,太阳能,中国,金融,基督教,UTC,穆斯林.
  4. 处理英国3月31日至12月31日年底的变化,以及其他国家的可比变化.

我还需要存储我定义为两个时间戳(日期和时间)之间差异的持续时间.这意味着需要能够存储"零"日期 - 因此我可以存储持续时间,例如,三个半小时; 或10分钟.

我有所需计算的详细信息.Firebird的时间戳基于日期函数,该函数从公元100年1月1日开始,因此无法按照我需要记录它们的方式使用.此外,此数据类型已准备好(与大多数时间戳功能一样),以记录自基准日期以来的天数; 它不适合记录日历日期.

谁能建议:

  1. 用于存储满足上述要求的日期和持续时间的数据结构
  2. 对这种数据结构的引用OR
  3. 提供指导来构建此类存储OR
  4. 任何可以帮助我解决的问题.

编辑:

@Warren P在他的回答中提供了一些出色的工作.我显然没有完全解释我所寻求的内容,因为他的工作主要集中在计算以及如何计算这些计算上.所有有价值和有用的东西,但不是我打算传达的问题.

我确实知道了在日期的各种表示之间进行转换所需的所有计算,并且我对如何实现它们有相当好的想法(使用Warren建议的元素).但是,我的要求是存储符合上面列出的各种标准的日期.示例:要存储的日期 - 'June June 13 Charles II'.我正在尝试确定存储此类日期的适当结构.

编辑:

我修改了我提出的架构.我已在每个表中列出了属性,并通过示例定义了表和属性,在实体框的第三部分中给出.我用这个给出的例子问题答案通过例如我的定义,我的问题,以对应修改了的例子.虽然我通过描述其他人的例子证明了我的模式,但这种模式可能仍然过于复杂; 过分析; 错过了一些明显的简化,可能很难实现(事实上,这可能是完全错误的).任何意见或建议都是最受欢迎的.

在此输入图像描述

delphi firebird datetime calendar date

20
推荐指数
1
解决办法
1161
查看次数

什么算法确定点到贝塞尔曲线的接近程度?

我希望确定一个点(鼠标位置)何时在一个B样条控制点定义的曲线上或附近.

我将为B-Spline提供的信息是n个控制点的列表(在x,y坐标中).控制点列表可以是任意长度(> = 4)并定义由(n-1)/ 3立方贝塞尔曲线组成的B样条.贝塞尔曲线都是立方的.我希望设置一个参数k,(以像素为单位)定义为"接近"曲线的距离.如果鼠标位置在曲线的k个像素内,那么我需要返回true,否则返回false.

有没有一个算法可以提供这些信息.任何解决方案都不需要精确 - 我正在努力达到1像素(或坐标)的容差.

我发现以下问题似乎提供了一些帮助,但不回答我的确切问题.特别是第一个参考似乎仅是4个控制点的解决方案,并没有考虑我希望定义的接近因素.

点相对于贝塞尔曲线的位置

贝塞尔曲线与线段之间的交点

编辑:示例曲线:

 e, 63.068, 127.26   
    29.124, 284.61   
    25.066, 258.56   
    20.926, 212.47   
        34, 176  
    38.706, 162.87  
    46.556, 149.82  
    54.393, 138.78 
Run Code Online (Sandbox Code Playgroud)

格式的描述是:"为每个边缘分配一个pos属性,该属性由3n + 1个位置组成.这些是B样条控制点:点p0,p1,p2,p3是第一个Bezier样条,p3 ,p4,p5,p6是第二个等.点由逗号分隔的两个整数表示,表示以点(1/72英寸)指定的位置的X和Y坐标.在pos属性中,控制点列表可以在起始点ps和/或终点pe之前.它们分别具有通常的位置表示,带有"s"或"e"前缀."

EDIT2:对"e"点的进一步说明(如果存在,则为s).

在pos属性中,控制点列表可以在起点ps和/或终点pe之前.它们具有通常的位置表示,分别带有"s"或"e"前缀.如果在p0处有箭头,则存在起点.在这种情况下,箭头从p0到ps,其中ps实际上在节点的边界上.箭头的长度和方向由矢量(ps -p0)给出.如果没有箭头,则p0位于节点的边界上.类似地,点pe在边缘的另一端指定箭头,连接到最后一个样条点.

algorithm math graphics bezier spline

10
推荐指数
1
解决办法
4523
查看次数

导入Control.Exception引起的GHC编译错误

在尝试学习Haskell时继续出现障碍.

我正在关注"真实世界Haskell",当谈到让他们的一个复杂的例子工作时,我得到以下错误

" e' in the constraint: 在FoldDir.hs中使用`handle'产生的模糊类型变量GHC.Exception.Exception e':88:14-61可能的修复:添加修复这些类型变量的类型签名"

我的相关代码是:

import Control.Exception (bracket, handle)
maybeIO :: IO a -> IO (Maybe a)
maybeIO act = handle (\_ -> return Nothing) (Just `liftM` act)
Run Code Online (Sandbox Code Playgroud)

我该如何根除这个错误?

haskell types

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

谁正在调查功能和可用性的测量?

我正在寻求指导,以协助我的研究方向,在系统开发中提供功能,可用性或优雅的评估.

您能否提供有关功能,可用性或编码风格测量的工作参考?谁(个人/组织)正在这个领域工作?我在哪里可以找到这样的参考.

我已经提出了一些关于系统构建的想法,这与主流开发有点不同.起点是对问题的充分描述.我正在开发一个演示/概念验证项目.

在开发我的概念验证项目时,我发现了一个意想不到的,未被忽视的好处.到目前为止,我发现可以通过间接查看开发来收集有关系统完整性的有用信息.此间接视图基于问题的描述,而不是软件解决方案.

我也相信,由于这些发展,很可能从我在其他领域的系统开发方法中提供指导,例如关于系统功能的指导; 系统的可用性如何; 或解决方案有多优雅.

到目前为止,我的探索得出了以下建议,以及我对它们的回应:

  1. 文学编程很优雅. - 有文化的编程可能很优雅,但这会改变问题 - 你如何评估一个程序的文化程度?
  2. 我正在寻找相当于美学衡量标准的系统开发,即不可言说的 - 虽然我意识到这是不可能的,但我仍然相信可以在开发系统的过程中提供有关信息的指导.
  3. 我正在寻求的只能在解决方案使用一段时间后进行评估,并且只能通过与同一问题的其他解决方案进行比较来评估. - 情况可能就是这样,而且可能确实是我搜索创建的摇滚.但是我仍然认为,开发中的措施可能会对软件的这些方面提出一些启发性的见解.
  4. 功能点分析是功能的衡量标准 - 我将FPA视为衡量生产力而非功能的标准.它并没有告诉您系统中包含了多少功能,而是与从相同上下文派生的基线相比包含了多少功能.随着背景的不断发展,这会削弱措施的实用性.
  5. 这些概念无法衡量,并且没有就功能性,可用性或优雅的构成达成一致,并且不能出于类似的原因 - 我很顽固地相信我至少可以通过以下方式反驳这一建议:为系统开发人员提供一些帮助.
  6. 我正在寻找的信息不在系统开发之内; 在图形艺术领域; 心理学; 生物学; 或者其他 - 这看起来越来越有可能.
  7. 直接利用系统的对象作为其用户界面 - 这显示了一类旨在促进解决问题的系统的前景.
  8. 传统图形艺术的经验教训(复杂数据的布局)可以转移到系统开发 - 这看起来像是最有前途的路线,我正在尝试与领先的图形设计师建立对应关系.这可能只适用于信息系统,但看起来好像它的范围要广泛得多.
  9. 也有人认为我是一名"建筑宇航员",与现实脱节 - 可能就是这种情况,但如果是这样,那么我很可能是最后才意识到这一点,而这种前景并非如此阻止我的搜索.

language-agnostic methods analysis

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

什么是从对列表中提取行李的有效算法?

我有一对对象列表.对象可以按任意顺序出现在对中.什么是最有效的算法(和实现?)来找到相同对象之间的所有包(即允许重复的集合).为了我的目的,可以假定对象引用是指针,或名称或一些类似的方便,简短,有用的表示.单个对是可识别的.在该对的两个部分中没有对具有相同的对象.

所以给出一对对列表(Oid是一个对象引用; Pid一对引用)

O1-P1-O2
O3-P2-O4
O5-P3-O1
O1-P4-O2
O2-P5-O1
O1-P6-O5
O7-P7-O8
Run Code Online (Sandbox Code Playgroud)

应该返回:

P1;P4;P5 and P3;P6
Run Code Online (Sandbox Code Playgroud)

algorithm performance list bag

3
推荐指数
1
解决办法
186
查看次数

哈斯克尔守卫没有得到满足

test :: [String] -> [String]

test = foldr step []

  where step x ys

          | elem x ys = x : ys

          | otherwise = ys
Run Code Online (Sandbox Code Playgroud)

我正在尝试构建一个包含所有输入的不同字符串的新列表.我的测试数据是:

test ["one", "one", "two", "two", "three"]
Run Code Online (Sandbox Code Playgroud)

预期结果:

["one", "two", "three"]
Run Code Online (Sandbox Code Playgroud)

我是Haskell的新手,我确信我错过了一些非常基础和明显的东西,但是已经没有办法探索这个问题了.你能指点我的想法不足吗?

实际的反应是[].似乎永远不会满足第一个保护条件(如果我替换它True,原始列表被复制),因此输出列表永远不会被构建.

我的理解是,折叠会累积列表中每个项目的步骤结果,将其添加到空列表中.我预计该步骤将测试每个项目是否包含在输出列表中(测试的第一个元素不在那里)并将添加尚未包含在输出列表中的任何内容.显然不是 :-)

haskell guard

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

如何定义类型安全约束玫瑰树

我试图定义具有以下特征的数据结构:

  1. 这是一棵玫瑰树
  2. 树中的节点是可变排序的
  3. 节点类型之间的唯一区别是它们可以采用的子节点数量的限制
  4. 完整的约束集是: 无;仅一个; 仅两个;最后一个; 至少两个
  5. 我希望相关约束可以进行类型检查和检查。(例如,在构建或编辑树时,尝试将第二个子项添加到 IamJustOne :: OneOnly 是一个错误)

我很难开始定义这个结构(尤其是第 3-5 点)。

  1. 网上有关于定义玫瑰树所需步骤的信息。
  2. Data.Tree.Rose 中的信息足以创建具有可变节点的玫瑰树。(尽管我仍然不清楚该模块中 Knuth 树和 Knuth 森林之间的区别。)
  3. 有关于异构容器的研究水平论文远高于我的理解水平

我最初的方法是尝试创建 MyRose 的子类型(不是工作代码):

data MyRose sub = MyRose {label :: String, subtype :: sub, children :: [MyRose sub]}
type AtLeastOne a = snoc a [a]
type AtLeastTwo a = snoc a ( snoc a [a] )
...
instance MyRose AtLeastOne where children = AtLeastOne MyRose -- instances to provide defaults
...
instance None STree where children …
Run Code Online (Sandbox Code Playgroud)

tree haskell

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

如何从动态生成的表单中检索数据?

我在从程序动态生成的表单中获取信息时遇到问题.

我的程序一直运行,直到它需要来自用户的数据; 此时它应该运行一个输入表单,并从中检索数据.

下面的示例代码运行并显示输入表单,但不允许任何输入.它确实在表单初始化时返回编辑框中文本的长度.

这种方法有什么不对?

如果可能的话,我想保持分离接口和实现(包括表单)的整体方法; 我还想继续使用无模式显示表单.

编辑

在调查了@Ken White建议的模态形式后,我确定模态形式不适合我试图做的事情.我提出了一个解决方案,总结如下:

  1. 两个接口:
  2. IResult - 定义为将表单中所需的数据传递给UserInput.
  3. IUserInput - 从IResult中的表单获取用户输入.
  4. 两个创建者功能 - 每个接口一个.
  5. 接口的实现 - 每个接口一个对象,一个用于实际用户输入表单.

我已经写了这个解决方案的详细说明.

结束编辑

program TestProject2;

uses Dialogs, Forms, StdCtrls, SysUtils;

type
  ITestForm = interface
    function getFormString: string;
    procedure setFormString(aString: string);
  end;

  TForm6 = class(TForm, ITestForm)
    Edit1: TEdit;
  private
    function getFormString: string;
    procedure setFormString(aString: string);
  end;

{$R Unit6.dfm}

function NewTestFormOutput: string;
  var
    tmpForm: TForm6;
  begin
    Application.CreateForm(TForm6, tmpForm);
    tmpForm.Show;
    Result := tmpForm.getFormString;
  end;

function TForm6.getFormString: string;
  begin
    Result …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe

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