由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教大牛和小牛帮助菜鸟ML编程问题!
相关主题
请熟悉Scheme (LISP)编程的高手帮忙anyone here using ruby?
Principles of Reactive Programming 网上课程如何GDB调试因pthread_cond_wait()阻塞的线程? (转载)
How to implement "reverse a singly linked list" recursively有拿common lisp吃饭的没?
stl 源代码疑问对pthread熟悉的XD请进来看看
$3.95的Lisp In Small Pieces想学函数语言和高层次抽象的同学看过来
anyone using common lisp daily?reverse LL recursively
重复利用threads的问题版上有人用Lisp么?
C memory leak problem helpmetaprogramming
相关话题的讨论汇总
话题: nil话题: list话题: true话题: lisp
进入Programming版参与讨论
1 (共1页)
k***t
发帖数: 769
1
Write a function increasing: int list -> bool that returns true if its
input is a list of integers in increasing order.
Define function addOneToAll(x, L) that takes a value
x and add it to all the elements in L, which is a list of lists.
For example, addOneToAll(1, [nil, [2], [3], [2,3]]) = [[1], [1,2], [1,3], [1
,2,3]].
才开始学编程,这两个怎么写啊?
第二个题,我写了这样的可是不工作:
-fun addOneToAll(a,nil)=nil
|fun addOneToAll(a,[x]::[y]::nil)=(a::[x])::addOneToAll(a,[y]::nil)::nil;
希望大家帮我。
k***t
发帖数: 769
2
:(no one knows?
G***l
发帖数: 355
3
不懂ML,用同样ML family的F#解答一下,你应该可以看明白
第一个问题,思路:list为空的时候怎么办?list只有一个的时候怎么办?list有多个
的时候怎么办?
let rec IsMonoIncreasing = function
| [] -> true
| first::second::remain ->
match second > first with
| false -> false
| true -> IsMonoIncreasing (second::remain)
| singleElement::[] -> true
注意为什么要把至少2个的情况放在只有一个的情况前面。
第二个就不写code了,不过x::y::nil应该match的是只有两个元素的list吧?你应该
match用 x::remain

[1

【在 k***t 的大作中提到】
: Write a function increasing: int list -> bool that returns true if its
: input is a list of integers in increasing order.
: Define function addOneToAll(x, L) that takes a value
: x and add it to all the elements in L, which is a list of lists.
: For example, addOneToAll(1, [nil, [2], [3], [2,3]]) = [[1], [1,2], [1,3], [1
: ,2,3]].
: 才开始学编程,这两个怎么写啊?
: 第二个题,我写了这样的可是不工作:
: -fun addOneToAll(a,nil)=nil
: |fun addOneToAll(a,[x]::[y]::nil)=(a::[x])::addOneToAll(a,[y]::nil)::nil;

k***t
发帖数: 769
4
太谢谢了。我会顺着你的思路再看看。

【在 G***l 的大作中提到】
: 不懂ML,用同样ML family的F#解答一下,你应该可以看明白
: 第一个问题,思路:list为空的时候怎么办?list只有一个的时候怎么办?list有多个
: 的时候怎么办?
: let rec IsMonoIncreasing = function
: | [] -> true
: | first::second::remain ->
: match second > first with
: | false -> false
: | true -> IsMonoIncreasing (second::remain)
: | singleElement::[] -> true

p*****3
发帖数: 488
5

[1
想歪了,面壁...

【在 k***t 的大作中提到】
: Write a function increasing: int list -> bool that returns true if its
: input is a list of integers in increasing order.
: Define function addOneToAll(x, L) that takes a value
: x and add it to all the elements in L, which is a list of lists.
: For example, addOneToAll(1, [nil, [2], [3], [2,3]]) = [[1], [1,2], [1,3], [1
: ,2,3]].
: 才开始学编程,这两个怎么写啊?
: 第二个题,我写了这样的可是不工作:
: -fun addOneToAll(a,nil)=nil
: |fun addOneToAll(a,[x]::[y]::nil)=(a::[x])::addOneToAll(a,[y]::nil)::nil;

p*****2
发帖数: 21240
6
第一题
(defn f [list & args]
(let [f (first list) r (rest list) [prev] args]
(cond (empty? list) true
(nil? prev) (dfs f r)
(< prev f) (dfs f r)
:default false)))
p*****2
发帖数: 21240
7
第二题
(defn f [x list] (map #(cons x %) list))
G***l
发帖数: 355
8
你这是lisp family的语言吧?lisp跟ML差别还是很大的。没学过lisp的不太可能看的
懂。楼主一看就是初学者。

【在 p*****2 的大作中提到】
: 第一题
: (defn f [list & args]
: (let [f (first list) r (rest list) [prev] args]
: (cond (empty? list) true
: (nil? prev) (dfs f r)
: (< prev f) (dfs f r)
: :default false)))

p*****2
发帖数: 21240
9

这样呀。我不懂ml。主要的区别是啥呀?我以为思想都差不多呢。

【在 G***l 的大作中提到】
: 你这是lisp family的语言吧?lisp跟ML差别还是很大的。没学过lisp的不太可能看的
: 懂。楼主一看就是初学者。

G***l
发帖数: 355
10
那java和lisp主要差别是啥呀?差别很大的两个语言,这个话题一两句话哪说的清。
但你看看我前面F#写的code,和你那个lisp完全不同吧。

【在 p*****2 的大作中提到】
:
: 这样呀。我不懂ml。主要的区别是啥呀?我以为思想都差不多呢。

相关主题
anyone using common lisp daily?anyone here using ruby?
重复利用threads的问题如何GDB调试因pthread_cond_wait()阻塞的线程? (转载)
C memory leak problem help有拿common lisp吃饭的没?
进入Programming版参与讨论
p*****2
发帖数: 21240
11

你那个我能看懂 跟我的差不多 就是有点不简练

【在 G***l 的大作中提到】
: 那java和lisp主要差别是啥呀?差别很大的两个语言,这个话题一两句话哪说的清。
: 但你看看我前面F#写的code,和你那个lisp完全不同吧。

G***l
发帖数: 355
12
反正我要是没学过lisp,你那个我绝对看不懂。
不过lisp说别人不简练?F#的7行,你lisp的9行。不考虑我定义的变量名的长度的话,
每行也比你短吧。

【在 p*****2 的大作中提到】
:
: 你那个我能看懂 跟我的差不多 就是有点不简练

p*****2
发帖数: 21240
13

我感觉lisp跟java的差别,比lisp跟ml的差别大多了。
你就是用了个pattern matching吧。我是觉得应该看看怎么把有一个元素和没有元素的
情况合并一下。倒不是说行数。

【在 G***l 的大作中提到】
: 反正我要是没学过lisp,你那个我绝对看不懂。
: 不过lisp说别人不简练?F#的7行,你lisp的9行。不考虑我定义的变量名的长度的话,
: 每行也比你短吧。

G***l
发帖数: 355
14
这不是要写的最简单最直观,让初学者看的懂嘛。
用lisp family的scheme写一个:
(define (isMonoInc? x)
(cond
((or (null? x) (null? (cdr x))) #t)
((< (car x) (car (cdr x))) (isMonoInc? (cdr x)))
(else #f)))

【在 p*****2 的大作中提到】
:
: 我感觉lisp跟java的差别,比lisp跟ml的差别大多了。
: 你就是用了个pattern matching吧。我是觉得应该看看怎么把有一个元素和没有元素的
: 情况合并一下。倒不是说行数。

p*****2
发帖数: 21240
15

我也把我的程序update了一下,6行。
你刚才怎么说看不懂我的?你不是会lisp吗?

【在 G***l 的大作中提到】
: 这不是要写的最简单最直观,让初学者看的懂嘛。
: 用lisp family的scheme写一个:
: (define (isMonoInc? x)
: (cond
: ((or (null? x) (null? (cdr x))) #t)
: ((< (car x) (car (cdr x))) (isMonoInc? (cdr x)))
: (else #f)))

G***l
发帖数: 355
16
我是说如果我不会lisp。。。
ml也可以写的很简洁,但是初学者可能看不懂
let rec IsMonoInc = function
| [] -> true
| [f] -> true
| f::((s::_)as remain) -> if f >= s then false else IsMonoInc(remain)

【在 p*****2 的大作中提到】
:
: 我也把我的程序update了一下,6行。
: 你刚才怎么说看不懂我的?你不是会lisp吗?

p*****2
发帖数: 21240
17

这样呀。你到提醒我应该去看一下clojure的pattern matching了,刚发现他们也有一
个。一会儿瞧瞧去。

【在 G***l 的大作中提到】
: 我是说如果我不会lisp。。。
: ml也可以写的很简洁,但是初学者可能看不懂
: let rec IsMonoInc = function
: | [] -> true
: | [f] -> true
: | f::((s::_)as remain) -> if f >= s then false else IsMonoInc(remain)

p*****2
发帖数: 21240
18

大牛会多少种fp语言呀?

【在 G***l 的大作中提到】
: 我是说如果我不会lisp。。。
: ml也可以写的很简洁,但是初学者可能看不懂
: let rec IsMonoInc = function
: | [] -> true
: | [f] -> true
: | f::((s::_)as remain) -> if f >= s then false else IsMonoInc(remain)

G***l
发帖数: 355
19
不是大牛。scheme会一些。haskell学了一点后来没有空学了。现在用的最多的是F#,
因为是.net上的。.net上没有支持比较好的lisp family的。不过有的话我可能也不太
会用,虽然理解,但是欣赏不了括号。。。。

【在 p*****2 的大作中提到】
:
: 大牛会多少种fp语言呀?

H****S
发帖数: 1359
20
1. fun (xs) = case xs of
[] => true
| x::[] => true
| x::y::xs' => if (x <= y) fun (y::xs') else false
2. fun addOneToAll(x, L) = case L of
[] => []
| y::ys => (x::y) :: (addOneToAll (x, ys))
Most amazing thing about ML is although everything is static typed, you don'
t need to specify which class/type the input argument is and return value is
-- type inference will all handle that for you :-)
BTW Dan Grossman recently opened a course "Programming Language" in coursera
. If you are interested in learning ML, I would suggest going there.

[1

【在 k***t 的大作中提到】
: Write a function increasing: int list -> bool that returns true if its
: input is a list of integers in increasing order.
: Define function addOneToAll(x, L) that takes a value
: x and add it to all the elements in L, which is a list of lists.
: For example, addOneToAll(1, [nil, [2], [3], [2,3]]) = [[1], [1,2], [1,3], [1
: ,2,3]].
: 才开始学编程,这两个怎么写啊?
: 第二个题,我写了这样的可是不工作:
: -fun addOneToAll(a,nil)=nil
: |fun addOneToAll(a,[x]::[y]::nil)=(a::[x])::addOneToAll(a,[y]::nil)::nil;

c***C
发帖数: 139
21
第一题
fun increasing(lst: int list) =
case lst of
[] => true
| i::[] => true
| i::(j::lst') => i < j andalso increasing(lst')
第二题
fun addOneToAll思路跟第一题相似

[1

【在 k***t 的大作中提到】
: Write a function increasing: int list -> bool that returns true if its
: input is a list of integers in increasing order.
: Define function addOneToAll(x, L) that takes a value
: x and add it to all the elements in L, which is a list of lists.
: For example, addOneToAll(1, [nil, [2], [3], [2,3]]) = [[1], [1,2], [1,3], [1
: ,2,3]].
: 才开始学编程,这两个怎么写啊?
: 第二个题,我写了这样的可是不工作:
: -fun addOneToAll(a,nil)=nil
: |fun addOneToAll(a,[x]::[y]::nil)=(a::[x])::addOneToAll(a,[y]::nil)::nil;

1 (共1页)
进入Programming版参与讨论
相关主题
metaprogramming$3.95的Lisp In Small Pieces
Block on mac os xanyone using common lisp daily?
这个题目能否半小时完成coding?重复利用threads的问题
C++ 程序求助C memory leak problem help
请熟悉Scheme (LISP)编程的高手帮忙anyone here using ruby?
Principles of Reactive Programming 网上课程如何GDB调试因pthread_cond_wait()阻塞的线程? (转载)
How to implement "reverse a singly linked list" recursively有拿common lisp吃饭的没?
stl 源代码疑问对pthread熟悉的XD请进来看看
相关话题的讨论汇总
话题: nil话题: list话题: true话题: lisp