编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   
 使o'caml作为介绍语言
指数 -> 编程,一般编程 -> 功能规划
转到页面 1, 2, 3  下一页
查看上一个主题 可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
WTD.




邮政发布: 2010年12月22日星期三下午3:33  帖子主题:使O'Caml作为介绍语言的案例

使o'caml作为介绍语言的案例。

让我们将其与其他一些流行的选择进行比较,看看它是如何比较的。让我们调用这些选择Java,C ++,Python和方案。

工具

教学的一个关键方面是,存在良好选择的工具来帮助教学。我会忽略这里的文本,因为这主要是关于软件工具,除了说我试图做出案例的语言是处于劣势。

我认为编程语言可以提供的最重要的工具之一是某种形式的交互环境:快速轻松地提示输入表达式或语句,而无需编写整个程序,保存到文件并编译和/或运行它。

这里的Python和Schreement在这里非常高度,o'caml与他们在一起。 Java和C ++没有这种抛光的环境。 Java确实有BeanShell,但Java语言的详细程度不适用于这种环境。

O'Caml的交互式环境可以获得特殊点,以澄清其输出中的类型信息,非常清楚地突出显示任何语法错误的来源。

胜利:o'caml.

java.和C ++提供编译器,而Python和Scheme(通常是常设)提供解释器。解释器通常很好,因为它们避免单独编译和运行步骤。但是,编译步骤频繁地捕获型号不兼容的问题,即解释器离开直到运行时间。

O'Caml提供了两种工具,提供了更大的灵活性,并在其解释形式中保持静态键入,越早越来越少。

胜利:o'caml.

所提到的所有语言都具有稳固和开放的开发人员支持,这对于他们在教育环境中的使用至关重要。

歧义

我注意到的学生新的最大绊脚石之一是他们使用的编程语言的模糊性。一种允许操作员重载的语言,特别是在Java的情况下,只有有时仅适用于混淆学生。

C ++对此特别臭名昭着。 Java温和地更好,但有些人可能会争辩,因为它允许特殊情况,而C ++已经编纂了其歧义,尽管拜占庭规则。

Python要好得多,尤其是基于缩进的块和相对简单的语法。新学生可能会发现列表全面和文字有点困惑,并且操作员重载可以让事情变得有点奇怪。有一个公平的魔力。

方案感谢S表达式非常明确,基本上缺乏语法。

o'caml沿着不同的道路走下去,有很多语法,但最终在类似的地方,因为运营商几乎从未为不同类型过载,并且关键字很少因不同的目的而重复使用(C ++我正在看你)。

WIN:O'CAML的静态打字和严格的执行,使其在这一领域略微边缘。它还获得特殊点,以便没有“else”或无与伦比的模式。

学习曲线

我一直观察到学生新的编程中的效果受益于温和的学习曲线。要求他们从没有知识来了解高级概念以便开始询问太多。

让我们看看Java。要构建一个基本的第一个程序,我们有一个类和一个具有“公共”和“静态”的关键字的方法。我们有像“system.out”这样的对象。这是抛出一个没有模糊的想法的新学生是很多东西意味着什么。

C ++中的同样的事情要求了解名称空间和函数和运算符重载。

方案,python和o'caml赢得在这里,加入深度,因为学生走了,而不是在开始时将它们全部转储,然后在课程的持续时间内解释它,但是只要我们开始,Python就会逐步恢复一半进入“一切都是一个物体”。

WIN:O'CAML和计划领带

宽度

一个温柔的学习曲线很棒,但我们也希望能够用介绍语言涵盖很多概念。如果不是在一门课程中,那么在几个课程中。

C ++是一种非常通用的语言,支持各种编程样式。不幸的是,对许多人的支持很大程度上依赖于模板这样的东西,目前的工具不支持清晰的错误消息。调试模板错误不是应该在入门类别中迫使学生强制的东西。

java.非常狭隘。 Java唯一的兴趣是面向对象的编程。虽然一个人可能会争辩到商业角度来看,但它极大地限制了其对教育的实用性。

Python比Java更广泛,并使其广泛的概念比C ++更容易访问。遗憾的是,在Python社区的力量方面存在一定的表情,朝着功能规划,使其能够在这里赚取顶部标记。

方案与必要的和功能编程有一个非常好的工作,但面向对象的编程有点追求,而且它表明,虽然可能更愿意这样做,但我认为不要为这种编程风格准备学生不宜。

WIN:O'CAML支持令人遗憾的,功能和面向对象的编程。这是这里的明确胜利者。

结论

探索介绍性编程课程中的四个主要关注领域:工具,歧义,学习曲线和广度,我们留下了一个明确的赢家,并强烈地看着o'caml作为一种用于这种语言的强烈案例课程。
赞助
赞助
赞助
赞助
Jcollins1991.




邮政发布: 2010年12月22日星期三下午4:58  帖子主题:Re:使o'caml作为介绍语言

O'Caml的有趣论点,但似乎有点偏爱......以什么方式o'caml丢失给其他语言? /它有什么关于它可能会阻止来自切换的其他语言的用户?
WTD.




邮政发布: 2010年12月22日星期三:下午9:10  帖子主题:RE:使o \'caml作为介绍语言的案例

与Java或C ++相比,缺乏广泛的行业采用可能是针对它的DING,并在较小程度的Python。计划同样是学术界的。

但是,我认为这是一个有意思的点,因为介绍语言相当远离程序员准备工作场所的程序员。有时间学习Java或C ++或其他东西。
Terancen.




邮政发布: 2010年12月22日星期三晚上10:16下午  帖子主题:RE:使o \'caml作为介绍语言的案例

这可能只是用语言说话,但我发现很难阅读。在Wikipedia上看一些代码样本,我遇到了解发生了什么,而Python和Tying的类似示例,远远易于阅读语言。
WTD.




邮政发布: 2010年12月22日星期三10:37下午  帖子主题:RE:使o \'caml作为介绍语言的案例

心灵详细说明并提供一些样品?

请记住,我是作为介绍语言的案例。缺乏句法偏差会导致较少的此类事件。

与我列出的其他语言相比,您如何找到o'caml代码进行可读性?
Jcollins1991.




邮政发布: 2010年12月22日星期三10:55 PM  帖子主题:Re:使o'caml作为介绍语言

如果一个人来看看任何语言(没有先前的知识),我认为Java或C ++只因为缩进而最容易理解,以及如何写入。

代码:

#let rec映射f l =
   match l with
     [] -> []
   | hd :: tl -> f hd :: map f tl;;


我觉得这一切的短片这一切可能更令人困惑,这就是为什么我喜欢方案作为学习语言,因为你知道这一旦你知道它更容易理解样本程序。

代码:

让fib n =
 让rec fib_aux n a b =
    match n with
    | 0 -> a
    | _ -> fib_aux (n - 1) (a + b) a
  in
  fib_aux n 0 1;;


总的来说,O'Caml的语法看起来很有趣,但在较大的程序中似乎是如果有人不是很有经验,他们最终可能会写出极其令人困惑的代码(虽然这始终是一个风险)。

WTD:从第二个代码样本,是_基本上是其他语言还是其他的?此外,它对递归有什么样的支持? IIRC方案旨在允许无限制尾部递归调用,O'Caml有类似的东西吗?
WTD.




邮政发布: 2010年12月22日星期三晚10:59下午  帖子主题:RE:使o \'caml作为介绍语言的案例

要转换一个样本:

代码:
让REC SUM XS =
  match xs with
    | [] -> 0
    | x :: xs' -> x + sum xs'


在Python:

代码:
渣滓(xs):
    if xs == []:
        return 0
    else:
        x = xs[0]
        xs_prime = xs[1:-1]
        return x + sum(xs_prime)


在Python中更清楚了吗?
WTD.




邮政发布: 2010年12月22日星期三11:08 PM  帖子主题:RE:使o \'caml作为介绍语言的案例

_在这种情况下是肯定的,这是它作为默认情况,它还向编译器/解释器表示:“我不关心这个的价值,所以不要给它一个名字。”

是的,o'caml的工具实施尾呼叫消除。
赞助
赞助
赞助
赞助
WTD.




邮政发布: 2010年12月22日星期三11:55  帖子主题:RE:使o \'caml作为介绍语言的案例

另一个例子:

代码:
保留x =
   match x with
        1 -> "one"
      | 2 -> "two"
      | 3 -> "three"
      | _ -> "some number"


或者,如果我们实际上想要该价值:

代码:
保留x =
   match x with
        1 -> "one"
      | 2 -> "two"
      | 3 -> "three"
      | n -> "some number " ^ (string_of_int n)
WTD.




邮政发布: 2010年12月23日星期四3:02  帖子主题:RE:使o \'caml作为介绍语言的案例

当然,我们总是可以使用“IF”。

代码:
保留x =
   if x = 1 then "one"
   else if x = 2 then "two"
   else if x = 3 then "three"
   else "some number"


但是,当我们可以使用模式匹配时,为什么会打扰那个混乱?
WTD.




邮政发布: 2010年12月23日星期四4:13 AM  帖子主题:RE:使o \'caml作为介绍语言的案例

在Fibonacci上示例:

代码:
让fib n =
   让rec fib_aux n a b =
        match n with
              0 -> a
            | _ -> fib_aux (n - 1) (a + b) a
    in
        fib_aux n 0 1;;
 
def fib.(n):
    def fib_aux(n, a, b):
        if n == 0:
                    return a
        else:
                    return fib_aux(n - 1, a + b, a)
    return fib_aux(n, 0, 1)


在理解方面,这两个真的不是太不同,一旦应用了类似的压痕样式。当然,只要Python没有(并由其BDFL的愿望)来支持Python示例,支持尾呼叫消除。
BBI5291




邮政发布: 2010年12月23日4:14 AM  帖子主题:Re:使o'caml作为介绍语言

我认为Haskell对这种事情有更好的语法:

O'Caml:
代码:
#let rec映射f l =
   match l with
     [] -> []
   | hd :: tl -> f hd :: map f tl;;


Haskell:
代码:
地图F.[] = []
地图F.(hd:tl) = f hd : map f tl


O'Caml:
代码:
让REC SUM XS =
  match xs with
    | [] -> 0
    | x :: xs' -> x + sum xs'


Haskell:
代码:
和[] = 0
和(x:xs) = x + sum xs


我猜Haskell的纯粹职能范式确实努力地击中了学生(没有直接支持势在必行和面向对象的编程,只用Monad和Whatnot仿真)。
WTD.




邮政发布: 2010年12月23日星期四4:38  帖子主题:RE:使o \'caml作为介绍语言的案例

是的。 Haskell是学生挑战自己......但后来的一个很棒的事情。这是一种伟大的语言,但魔法内容真的很高。 微笑
WTD.




邮政发布: 2010年12月23日星期四下午3:19  帖子主题:Re:使o'caml作为介绍语言

一个非常简单的程序的版本,几乎是每一个学生都在早期。所有人都非常天真地完成了。我今天早上没有时间达成协议,以便谁想要填补这一点,请这样做。

代码:
#包括<iostream>

使用命名空间std;

floatFarenheit_to_celsius.(float farenheit_temp)
{
    return (farenheit_temp - 32) / 1.8;
}

int main()
{
    float input_temp;

    cout << "Input temperature: ";
    cin >> input_temp;

    cout << "In Celsius: " << Farenheit_to_celsius.(input_temp)" << endl;

    return 0;
}


代码:
公共班温度℃{
   公共静态浮法法伦蒂科西斯(float farenheitTemp) {
        return (farenheitTemp - 32) / 1.8;
    }

   公共静态空白主(String[] args) {
       BufferedReader输入=新BufferedReader(newInputStreamReader(System.in));

        System.out.print("Input temperature: ");

       floatipptemp = float.parsefloat(input.readLine());

        System.out.println("Celsius temperature: " + inputTemp);
    }
}


代码:
defFarenheit_to_celsius.(farenheit_temp):
    return (farenheit_temp - 32) / 1.8

打印"Input temperature: ",

INPUT_TEMP. = float(raw_input())

打印"Celsius temperature: ",farenheit_to_celsius.(input_temp)


代码:
letFarenheit_to_celsius. farenheit_temp =
    (Farenheit_temp - 。 32。) /. 1.8;;

print_string."Input temperature: ";;

让输入_temp = read_float();;

print_endline.("Celsius temperature: " ^ (farenheit_to_celsius input_temp.));;
BBI5291




邮政发布: 2010年12月23日11:39 PM  帖子主题:Re:使o'caml作为介绍语言

方案:
代码:

(display "Input temperature: ")
(display (format "Celsius temperature: ~a\n" (/ (- (read) 32) 1.8)))

(方案可能具有Printf功能,基本上是显示和格式的组成。我懒得检查标准。)
从上一个显示帖子:   
   指数 -> 编程,一般编程 -> 功能规划
查看上一个主题 告诉一个朋友可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题

13  [ 35 Posts ]
转到页面 1, 2, 3  下一页
跳到:   


Style:  
搜索: