Giter Site home page Giter Site logo

Comments (2)

VictorTaelin avatar VictorTaelin commented on May 23, 2024

The problem is that your term is ill-typed, but Formality wasn't raising an error. You can't use <> in computational positions, you need to either use dup, or use boxed definitions (#main), which causes the compiler to auto-fill the dups for you. I've fixed it now, so your program won't type-check anymore. It can be fixed by boxing main:

import Base@0

#create_step_list*N : ! {step : Word, limit : Word, acc : Word} -> List(Word)
  if acc .< limit:
    cons(~Word, acc, create_step_list(step, limit, acc + step))
  else:
    nil(~Word)
halt: nil(~Word)

#main : !Word
  let list3 = <create_step_list*>(3, 1000, 3)
  let list5 = <create_step_list*>(5, 1000, 5)
  let list15 = <create_step_list*>(15, 1000, 15)
  let concatenated_list = <concat*>(~Word, list3, list5)
  let concatenated_sum = <sum*>(concatenated_list)
  let duplicate_sum = <sum*>(list15)
  concatenated_sum - duplicate_sum

Or by explicitly using dup:

import Base@0

#create_step_list*N : ! {step : Word, limit : Word, acc : Word} -> List(Word)
  if acc .< limit:
    cons(~Word, acc, create_step_list(step, limit, acc + step))
  else:
    nil(~Word)
halt: nil(~Word)

main : !Word
  dup create = (create_step_list*)
  dup concat = (concat*)
  dup sum    = (sum*)
  # let list3 = create(3, 1000, 3)
    let list5 = create(5, 1000, 5)
    let list15 = create(15, 1000, 15)
    let concatenated_list = concat(~Word, list3, list5)
    let concatenated_sum = sum(concatenated_list)
    let duplicate_sum = sum(list15)
    concatenated_sum - duplicate_sum

Thank you very much for the report!

from kind.

LoPoHa avatar LoPoHa commented on May 23, 2024

I still don't get an error with version 0.3.125
Instead the wrong values still get computed.

> fm --version
0.3.125
> fm main/main 
233168
> fm main/main -o
4294967284
{"rewrites":12,"loops":26,"max_len":21}
> cat main.fm
import Base@0

#create_step_list*N : ! {step : Word, limit : Word, acc : Word} -> List(Word)
  if acc .< limit:
    cons(~Word, acc, create_step_list(step, limit, acc + step))
  else:
    nil(~Word)
halt: nil(~Word)

main : Word
  let list3  = <create_step_list*>(3, 1000, 3)
  let list5  = <create_step_list*>(5, 1000, 5)
  let list15 = <create_step_list*>(15, 1000, 15)
  let concatenated_list = <concat*>(~Word, list3, list5)
  let concatenated_sum = <sum*>(concatenated_list)
  let duplicate_sum = <sum*>(list15)
  concatenated_sum - duplicate_sum

Both of your versions work for -o, but get an oom error with -O.

Did i overlook something?

edit:
Yeah, i overlooked something:
I didn't type-check it.

from kind.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.