这个问题可能是也可能不是Haskell特有的,但它涉及到某个编程任务所面临的轻微烦恼.
我在Haskell中编写了一个程序,它主要针对我要解决的问题类型,但包括两个依赖组件:脚本的运行时估计函数,基于某个基准测试运行计算,以及文件名转换功能,它是根据我正在使用的文件的命名方案量身定制的.当然,如果我想使用除基准以外的性能的脚本,或者我发现估计过于保守,我想改变用于估计运行时的函数,同样我希望能够如果我需要使用具有不同命名方案的不同文件,请修改文件名转换功能.
但是,我运行我的脚本的(远程)计算机没有安装GHC或runhaskell,所以我不得不修改,编译和重新上传本地机器的代码,这有点麻烦.我的问题是,是否有一种简单的方法来实现我的代码的某些组件的更改,而无需重新编译,以便在调用时反映更改?
如果我的描述含糊不清,我会道歉,并且包括下面的血腥细节,因为如果细节证明不必要,我不想从一开始就用不必要的细节弄乱我的问题.
我在Haskell中编写这段代码主要是因为这是我最熟悉如何实现这些方法的语言; 虽然我知道其他语言可能更具可移植性,但我并不熟悉其他语言以实现这一点,而无需阅读大量文档并进行多次修订以使其工作.如果用Haskell实现我想要的灵活性是不切实际的,我可以理解,但我宁愿知道Haskell不能接受其他语言的建议.
我正在编写代码以在负载共享集群上运行独立的作业,因此我希望最接近地估计特定作业所需的时间,而不会在拍摄不足的情况下导致作业终止,并且没有过度拍摄,从而降低工作的优先级.我基于工作计划输入的大小来估算我的时间,并且我收集了足够的实际数据以得出大小和时间之间的近似二次关系.
我当前为输入分配时间估计并由此建立作业顺序的方式是通过du使用Haskell脚本解析输出,执行计算,并将时间结果写入新文件,然后将其读入作业分配脚本的循环.
正在为配对文件运行作业,这些文件共享一个通用名称,直到某一点,我希望保留的最后一个公共元素是's',从那时起,任何一个名称中都没有's'字符.因此,我正在向后遍历这些名字,直到我达到's'为止.我的代码包含在下面.这是自由的评论,可能有所帮助或可能混淆.其中一些对我正在处理的任务非常具体.
-- size2time.hs
-- A Haskell script to convert file sizes into job-times, based on observed job-times for
-- various file sizes
--
--
-- This file may be compiled via the following command:
-- > ghc size2time.hs
--
-- Should any edits be made, ensure that the compiled executable is updated accordingly
--
-- The executable is to be run with the following usage
--
-- > ./size2time …Run Code Online (Sandbox Code Playgroud) 我最近在使用Java,并且想知道Java中是否存在任何类型的接口实现派生.我首选的编程语言是Haskell,它在很多方面与Java相对立,但我想知道Java是否具有类似功能的一个特性是能够从其参数的接口实现派生复合类型的接口实现.例如,在Haskell中:
data Pair k v = Pair k v
instance (Ord k) => Ord (Pair k v) where
compare (Pair x _) (Pair x' _) = compare x x'
Run Code Online (Sandbox Code Playgroud)
这允许您订购一个Pair如果它的第一个参数可以被订购,而不明确要求是这种情况.但是,我在Java中最接近的是通过明确的要求:
class Pair<K extends Comparable<K>, V> extends Comparable<Pair<K,V>> {
K k;
V v;
public int compareTo(Pair<K,V> p) {
return k.compareTo(p.k);
}
}
Run Code Online (Sandbox Code Playgroud)
如果没有一种方法可以推断可比性,我就不可能在不确保所有对具有可比较的第一个元素的情况下实现对的BST,因此我不能实现任何类型的Map,其中第一个元素没有明确要求是可比的.有没有办法绕过这个,除了创建一个我的BST类的方法,试图通过首先将它作为可比较的方法来比较泛型类型,然后作为具有可比较的键的一对,比较可能的可比性?
我对Haskell相对较新,但我试图通过阅读和尝试解决Project Euler上的问题来学习.我目前正在尝试实现一个函数,它接受一个无限的整数列表,并返回所述列表中元素的成对和的有序列表.我真的在寻找解决我所面临的具体问题的方法,而不是对不同策略或方法的建议,但这些也是受欢迎的,因为编程人员并不意味着知道如何实施战略,而是选择最好的策略可用.
我的方法依赖于遍历无限生成器的无限列表并按顺序检索元素,其中有几个数学属性可用于实现我的解决方案.
如果我试图获得自然数的成对和的序列,例如,这将是我的代码:
myList :: [Integer]
myList = [1..]
myGens :: [[Integer]]
myGens = gens myList
where
gens = \xs -> map (\x -> [x+y|y<-(dropWhile (<x) xs)]) xs
Run Code Online (Sandbox Code Playgroud)
无论使用的数字集如何,只要它已排序,以下条件成立:
head (gens xs !! i) == 2*(myList !! i)(((gens xs) !! i) !! j) < (((gens xs) !! i+k) !! j+l)第二个条件的特殊情况是:
(((gens xs) !! i) !! j) < (((gens xs) !! i+1) !! j)(((gens xs) !! i) !! j) < (((gens …haskell ×3
algorithm ×1
compilation ×1
duplicates ×1
generator ×1
generics ×1
ghc ×1
interface ×1
java ×1
list ×1
portability ×1
typeclass ×1